|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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上调试经由过程。
这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。 |
|