仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 727|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL教程之SQL Server中单引号的两种处置技能

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:33:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
首先我们要知道,或许有一项技术存在很多理由让我们可以选择使用MySQL学习教程,但是让我们不使用它往往只要有一个理由就足够了。server|技能和数据库打交道要频仍地用到SQL语句,除非你是全体用控件绑定的体例,但接纳控件绑定的体例存在着天真性差、效力低、功效弱等等弱点。因而,年夜多半的程序员少少或较罕用这类绑定的体例。而接纳非绑定体例时很多程序员多数疏忽
了对单引号的特别处置,一旦SQL语句的查询前提的变量有单引号呈现,数据库引擎就会报错指出SQL语法不合错误,自己发明有两种办法能够办理和处置这类单引号的成绩(以VB为例子)。

----办法一:使用本义字符处置SQL语句。上面的函数能够在实行SQL语句前挪用,实行处置后的了局便可发生准确的结
果。

FunctionProcessStr(strAsString)
DimposAsInteger
DimstedestAsString
pos=InStr(str,"")

Whilepos>0
str=Mid(str,1,pos)&""&Mid(str,pos+1)
pos=InStr(pos+2,str,"")
Wend
ProcessStr=str
EndFunction
----个中str参数是你的SQL字符串。函数一旦发明字符串中有单引号呈现,就在后面补上一个单引号。

----办法二:使用数据工具中的参数。能够使用ADODB.COMMAND工具,把含有单引号的字符串传送给COMMAND,然后实行查
询等操纵便可。

----以上两种办法对照,办法一增添了体系处置工夫,办法二简便、高效,假如接纳存储历程,然后再传送参数给存储过
程,存储历程是预编译的,如许体系的效力更高。

----上面就举例子加以申明。

----新建一个项目,项目中有一个窗体(Form1),两个命令按钮,一个MSFlexGrid,称号分离为:Command1,
Command2,MSFlexGrid1,一个COMBOX(COMBO1),它的内容事后设定为"Paolof"、"Paolof"。Command1演示办法一,
Command2演示办法二,MSFlexGrid1存储办法二查询(SELECT)了局。关于其他的SQL操纵(INSERT、DELTER、UPDATAE)办法
极其相似,笔者就不再赘述。例子顶用到SQLSERVER中的PUBS数据库中的EMPLOYEE表,同时能够用SQL语法把个中两笔记录
中的FNAME改成"Paolof"、"Paolof"。SQL语法以下:

updateemployeesetfname="Paolof"
whereemp_id=PMA42628M
updateemployeesetfname="Paolof"
whereemp_id=PMA42628M
----程序以下:

----起首把后面的函数到场。

----在窗体的通用中声明以下变量:

Dimcnn1AsADODB.Connection毗连
DimmycommandAsADODB.Command命令
DimrstByQueryAsADODB.Recordset了局集
DimstrCnnAsString毗连字符串
PrivateSubForm_Load()
Setcnn1=NewADODB.Connection天生一个毗连
strCnn="driver={SQLServer};"&_
"server=ZYX_pc;uid=sa;pwd=PCDC;database=pubs"
没有体系数据源利用毗连字符串

strCnn="DSN=mydsn;UID=sa;PWD=;"
DATABASE=pubs;Driver={SQLServer};SERVER=gzl_pc"
假如体系数据源MYDSN指向PUBS数据库,也能够如许用
cnn1.OpenstrCnn,,,0翻开毗连
EndSub
PrivateSubCommand1_Click()演示字符处置
DimiAsInteger
DimjAsInteger
Setparm=NewADODB.Parameter
Setmycommand=NewADODB.Command

DimstrAsString
str=Combo1.Text
str=ProcessStr(str)
mycommand.ActiveConnection=cnn1
指定该command确当前举动毗连
mycommand.CommandText="select*from
employeewherefname="&str&""
mycommand.CommandType=adCmdText标明command范例
SetrstByQuery=NewADODB.Recordset
SetrstByQuery=mycommand.Execute()
i=0
DoWhileNotrstByQuery.EOF
i=i+1i中保留纪录个数
rstByQuery.MoveNext
Loop
MSFlexGrid1.Rows=i+1静态设置MSFlexGrid的行和列
MSFlexGrid1.Cols=rstByQuery.Fields.count+1
MSFlexGrid1.Row=0
Fori=0TorstByQuery.Fields.count-1
MSFlexGrid1.Col=i+1
MSFlexGrid1.Text=rstByQuery.Fields.Item(i).Name
Next设置第一行的题目,用域名添补

i=0
SetrstByQuery=mycommand.Execute()
rstByQuery.Requery
DoWhileNotrstByQuery.EOF
i=i+1
MSFlexGrid1.Row=i断定行
Forj=0TorstByQuery.Fields.count-1
MSFlexGrid1.Col=j+1
MSFlexGrid1.Text=rstByQuery(j)添充一切的列
Next
rstByQuery.MoveNext

Loop这个轮回用来添补MSFlexGrid的内容
EndSub
PrivateSubCommand2_Click()参数办法
DimiAsInteger
DimjAsInteger

Setparm=NewADODB.Parameter
Setmycommand=NewADODB.Command

parm_jobid.Name="name1"thislinecanbeommited
parm.Type=adChar参数范例
parm.Size=10参数长度
parm.Direction=adParamInput参数偏向,输出或输入
parm.Value=Combo1.Text参数的值
mycommand.Parameters.Appendparm到场参数



mycommand.ActiveConnection=cnn1
指定该command确当前举动毗连
mycommand.CommandText="select*
fromemployeewherefname=?"
mycommand.CommandType=adCmdText标明command范例
SetrstByQuery=NewADODB.Recordset
SetrstByQuery=mycommand.Execute()
i=0
DoWhileNotrstByQuery.EOF
i=i+1i中保留纪录个数
rstByQuery.MoveNext
Loop
MSFlexGrid1.Rows=i+1静态设置MSFlexGrid的行和列
MSFlexGrid1.Cols=rstByQuery.Fields.count+1
MSFlexGrid1.Row=0
Fori=0TorstByQuery.Fields.count-1
MSFlexGrid1.Col=i+1
MSFlexGrid1.Text=rstByQuery.Fields.Item(i).Name
Next设置第一行的题目,用域名添补

i=0
rstByQuery.Requery
DoWhileNotrstByQuery.EOF
i=i+1
MSFlexGrid1.Row=i断定行
Forj=0TorstByQuery.Fields.count-1
MSFlexGrid1.Col=j+1
MSFlexGrid1.Text=rstByQuery(j)添充一切的列
Next
rstByQuery.MoveNext

Loop这个轮回用来添补MSFlexGrid的内容
EndSub
----查询部分能够用存储历程以进步处置效力,减低收集流量。

----本程序在NTWORKSTATION4.0SP4、SQLSERVER7.0上调试经由过程。
这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。
透明 该用户已被删除
沙发
发表于 2015-1-19 16:26:22 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-24 14:18:36 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
爱飞 该用户已被删除
地板
发表于 2015-2-1 16:44:46 来自手机 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
乐观 该用户已被删除
5#
发表于 2015-2-7 09:50:14 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
若相依 该用户已被删除
6#
发表于 2015-2-21 13:15:57 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
若天明 该用户已被删除
7#
发表于 2015-3-6 20:22:27 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
金色的骷髅 该用户已被删除
8#
发表于 2015-3-13 08:09:44 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-20 17:24:43 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 01:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表