- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安VB教程基地 来源:黑客防线网安VB教程基地 浏览次数:0 |
----我们知道,VB的数据库编程有许多种方法,比如直接用ODBCAPI编程,这种方法灵活、高效,程序员可以实现对数据库复杂的控制;也可以用VB中的数据对象,如RDO(远程数据对象)、DAO(数据访问对象)、ADO(ActiveX数据对象),这种方法实现起来方便、快捷,但灵活性较差一些。由于存储过程在实现数据封装、隐藏以及代码的预编译、减少网络负载、维护方便等优点,所以被许多RDBMS和编程工具做支持。VB中的各类数据对象也提供对存储过程的支持。
----我们以ADO为例来说明其实现的步骤
----1.创建、调试存储过程。你可以在数据库中也可以在其他外挂程序的支持下进行存储过程的创建和调试工作。本例中的存储过程代码如下(使用PUBS的MSSQL中的例子库):
CREATEPROCEDUREmyprocedure
@job_idsmallint,
@job_lvltinyint
AS
SELECT*
FROMemployee
WHEREjob_id<@job_id
ANDjob_lvl>@job_lvl
----3.创建连接ADOconnection;
----4.创建命令ADOcommand;
----5.创建参数并设置各个参数的属性;
----6.执行ADOcommand;
----7.对数据进行处理;MSFlexGrid显示查询到的数据
----8.释放连接,退出程序。
----其中代码如下:
在窗体中声明以下变量:
Dimcnn1AsADODB.Connection‘连接
DimmycommandAsADODB.Command‘命令
Dimparm_jobidAsADODB.Parameter‘参数1
Dimparm_joblvlAsADODB.Parameter‘参数2
DimrstByQueryAsADODB.Recordset‘结果集
DimstrCnnAsString‘连接字符串
在窗体的LOAD事件中加入如下代码:
Setcnn1=NewADODB.Connection
‘生成一个连接
strCnn="DSN=MYDSN;uid=sa;pwd="
‘创建的系统数据源MYDSN指向PUBS数据库
cnn1.OpenstrCnn‘打开连接
在窗体的UNLOAD中的加入代码如下:
cnn1.Close‘关闭连接
Setcnn1=Nothing‘释放连接
在按钮中的代码如下:
DimIAsinteger
Dimjasinteger
Setparm_jobid=NewADODB.Parameter
Setmycommand=NewADODB.Command
'parm_jobid.Name="name1"
thislinecanbeommited
parm_jobid.Type=adInteger‘参数类型
parm_jobid.Size=3‘参数长度
parm_jobid.Direction=adParamInput
‘参数方向,输入或输出
parm_jobid.value=100‘参数的值
mycommand.Parameters.Append
parm_jobid‘加入参数
Setparm_joblvl=NewADODB.Parameter
‘parm_joblvl.Name="name2"
parm_joblvl.Type=adInteger
parm_joblvl.Size=3
parm_joblvl.Direction=adParamInput
mycommand.value=100
mycommand.Parameters.Appendparm_joblvl
mycommand.ActiveConnection=cnn1
‘指定该command的当前活动连接
mycommand.CommandText="myprocedure"
‘myprocedure是你要调用的存储过程名称
mycommand.CommandType=adCmdStoredProc
‘表明command为存储过程
SetrstByQuery=NewADODB.Recordset
SetrstByQuery=mycommand.Execute()
I=0
DoWhileNotrstByQuery.EOF
I=I 1‘I中保存记录个数
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()
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的内容
----1.Setrecordset=command.Execute(RecordsAffected,Parameters,Options)command.ExecuteRecordsAffected,Parameters,Options这是command的两种用法,一种有返回结果集,一种没有返回结果集。
----RecordsAffected:是指用update、delete操作时所影响的结果,对select的查询,其值为-1;这和在Mssqlserver中的QueryAnalyzer中的不一样。QueryAnalyzer中,select、update、delete的结果显示的是实际查、改、删的记录数。
----Options:指明command的类型,有adCmdText、adCmdTable、adCmdStoredProc等等,用户可见MSDN。
----2.在参数的类型中,用户可以用varchar来代替integer,系统会帮你自动实施转化;
----3.本例中仅为带输入参数的存储过程,如果要有输出参数,根据MSDN的材料,用ADO不行。你可以用RDO数据对象,MSDN中有一个例子,此处不做过多赘述;
----4.可以不用ADOCOMMAND对象,也可直接调用ADOCONNECTION的execute方法,结果很类似。
->我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |