📄 ba50.htm
字号:
<HTML>
<HEAD>
<TITLE>VB中调用带参数存储过程的实现</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<BODY topMargin=4 vLink=#0000ff>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD height="52">
<DIV align=center>
<CENTER>
<table border=0 cellpadding=0 cellspacing=0 width=679 align="center">
<tbody>
<tr>
<td width=200 height="59">
</TD></TR><!--msnavigation--></TBODY></TABLE>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tbody>
<tr><!--msnavigation--><td valign=top height="123">
<div align=center>
<table border=1 bordercolor=#b9d9ff cellpadding=0 cellspacing=0
class=table width=755>
<center>
<tr>
<td width="100%" height="9">
<div align="center"> <strong><b>VB中调用带参数存储过程的实现</b>
<font color="#ffffff">---</font></strong></span></div>
</td>
</tr>
<tr>
<td
width="100%" class="unnamed1" height="124">
<div align="left">
<p align="center"><font color="#ffffff"><br>
</font></p>
<p align="center"><font face="宋体" size="-1"> VB做为快速应用开发(RAD)工具越来越得到开发人员的认可和接受。它对许多API(如ODBC
API、SOCKET API等等)的封装使得编程变得简单起来。同时,它支持集成开发环境下的可视化、事件驱动、面向对象等编程特点。下面,我们谈谈在VB中调用存储过程的实现方法及其注意事项。
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
我们知道,VB的数据库编程有许多种方法,比如直接用ODBC API编程,这种方法灵活、高效,程序员可以实现对数据库复杂的控制;也可以用VB中的数据对象,如RDO(远程数据对象)、DAO(数据访问对象)、ADO(ActiveX
数据对象),这种方法实现起来方便、快捷,但灵活性较差一些。由于存储过程在实现数据封装、隐藏以及代码的预编译、减少网络负载、维护方便等优点,所以被许多RDBMS和编程工具做支持。VB中的各类数据对象也提供对存储过程的支持。
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
我们以ADO为例来说明其实现的步骤 </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
1. 创建、调试存储过程。你可以在数据库中也可以在其他外挂程序的支持下进行存储过程的创建和调试工作。本例中的存储过程代码如下(使用PUBS的MS
SQL中的例子库 ): </font></p>
<p><font face="宋体" size="-1">CREATE PROCEDURE myprocedure<br>
@job_id smallint,<br>
@job_lvl tinyint<br>
AS<br>
SELECT *<br>
FROM employee<br>
WHERE job_id < @job_id <br>
AND job_lvl > @job_lvl<br>
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
2. 在VB中生成一个新的工程,工程有一窗体,一个COMMAND(NAME:COMMAND1) 按钮,一个 MSFlexGrid(NAME:MSFlexGrid1)控件。
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
3. 创建连接ADO connection; </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
4. 创建命令ADO command; </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
5. 创建参数并设置各个参数的属性; </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
6. 执行ADO command; </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
7. 对数据进行处理;MSFlexGrid显示查询到的数据 </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
8. 释放连接,退出程序。 </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
其中代码如下: </font></p>
<p><font face="宋体" size="-1">在窗体中声明以下变量:<br>
Dim cnn1 As ADODB.Connection ‘连接<br>
Dim mycommand As ADODB.Command ‘命令<br>
Dim parm_jobid As ADODB.Parameter ‘参数1<br>
Dim parm_joblvl As ADODB.Parameter ‘参数2<br>
Dim rstByQuery As ADODB.Recordset ‘结果集<br>
Dim strCnn As String ‘连接字符串<br>
<br>
在窗体的LOAD事件中加入如下代码:<br>
Set cnn1 = New ADODB.Connection <br>
‘生成一个连接<br>
strCnn = "DSN=MYDSN;uid=sa;pwd="<br>
‘创建的系统数据源MYDSN指向PUBS数据库<br>
cnn1.Open strCnn ‘打开连接<br>
在窗体的UNLOAD中的加入代码如下:<br>
cnn1.Close ‘关闭连接<br>
Set cnn1 = Nothing ‘释放连接<br>
<br>
在按钮中的代码如下:<br>
Dim i As integer<br>
Dim j as integer <br>
Set parm_jobid = New ADODB.Parameter<br>
Set mycommand = New ADODB.Command<br>
' parm_jobid.Name = "name1" <br>
this line can be ommited<br>
parm_jobid.Type = adInteger ‘参数类型<br>
parm_jobid.Size = 3
‘参数长度 <br>
parm_jobid.Direction = adParamInput <br>
‘参数方向,输入或输出<br>
parm_jobid.value = 100 ‘参数的值<br>
mycommand.Parameters.Append <br>
parm_jobid ‘加入参数<br>
<br>
<br>
Set parm_joblvl = New ADODB.Parameter<br>
‘parm_joblvl.Name = "name2"<br>
parm_joblvl.Type = adInteger<br>
parm_joblvl.Size = 3<br>
parm_joblvl.Direction = adParamInput<br>
mycommand.value = 100<br>
mycommand.Parameters.Append parm_joblvl<br>
<br>
<br>
mycommand.ActiveConnection = cnn1 <br>
‘指定该command 的当前活动连接<br>
mycommand.CommandText = " myprocedure " <br>
‘myprocedure 是你要调用的存储过程名称<br>
mycommand.CommandType = adCmdStoredProc <br>
‘表明command 为存储过程<br>
Set rstByQuery = New ADODB.Recordset <br>
Set rstByQuery = mycommand.Execute()<br>
i = 0<br>
Do While Not rstByQuery.EOF<br>
i = i + 1 ‘ i 中保存记录个数<br>
rstByQuery.MoveNext<br>
Loop<br>
MSFlexGrid1.Rows = i + 1 <br>
‘动态设置MSFlexGrid的行和列<br>
MSFlexGrid1.Cols = rstByQuery.Fields.Count + 1<br>
MSFlexGrid1.Row = 0<br>
For i = 0 To rstByQuery.Fields.Count - 1<br>
MSFlexGrid1.Col = i + 1<br>
MSFlexGrid1.Text = rstByQuery.Fields.Item(i).Name<br>
Next ‘设置第一行的标题,用域名填充<br>
<br>
i = 0<br>
Set rstByQuery = mycommand.Execute()<br>
Do While Not rstByQuery.EOF<br>
i = i + 1<br>
MSFlexGrid1.Row = i ‘确定行<br>
For j = 0 To rstByQuery.Fields.Count - 1<br>
MSFlexGrid1.Col = j + 1<br>
MSFlexGrid1.Text = rstByQuery (j) <br>
‘添充所有的列<br>
Next<br>
rstByQuery.MoveNext <br>
<br>
Loop ‘这个循环用来填充MSFlexGrid的内容<br>
<br>
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font> <font face="宋体" size="-1"><b>特殊说明</b>
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
1. Set recordset = command.Execute( RecordsAffected, Parameters,
Options ) command.Execute RecordsAffected, Parameters, Options
这是command的两种用法,一种有返回结果集,一种没有返回结果集。 </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
RecordsAffected:是指用update、delete操作时所影响的结果,对select的查询,其值为-1;这和在Ms
sql server 中的Query Analyzer中的不一样。Query Analyzer中,select、update、delete的结果显示的是实际查、改、删的记录数。
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
Options:指明command的类型,有adCmdText、adCmdTable、adCmdStoredProc等等,用户可见MSDN。
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
2.在参数的类型中,用户可以用varchar来代替integer,系统会帮你自动实施转化; </font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
3.本例中仅为带输入参数的存储过程,如果要有输出参数,根据MSDN的材料,用ADO不行。你可以用RDO数据对象,MSDN中有一个例子,此处不做过多赘述;
</font></p>
<p><font color="#ffffff" face="宋体" size="-1">----</font><font face="宋体" size="-1">
4.可以不用ADO COMMAND对象,也可直接调用ADO CONNECTION的execute方法,结果很类似。
转载自中国程序员网站 <b>(文/张永晓)</b></font>
</div>
</td>
</tr>
</center>
<tr>
<td width="100%" class="unnamed1">
<p align=right><a href="ba49.htm">(上一页)</a>---<a href="ba51.htm">(下一页)</a></p>
</td>
</tr>
<tr>
<td width="100%" class="unnamed1">
</div>
</td>
</tr>
<!--msnavigation--></tbody>
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -