在Visual Basic 6.0中使用Microsoft ActiveX Data Objects (ADO)可以方便地与数据库进行交互。本文将介绍如何在VB6应用程序中使用存储过程,包括创建存储过程、在VB6中调用存储过程以及使用输出参数。
存储过程是一组预编译的SQL语句,它们作为一个单一任务执行。存储过程在数据库中以对象的形式存在,即使在执行完成后也是如此。
在SQL Server2000中,可以通过以下步骤创建一个简单的存储过程:
CREATE PROCEDURE empdetails @empid int AS
SELECT FirstName, Title, Address FROM Employees WHERE EmployeeID=@empid
GO
在SQL Query Analyser中测试存储过程:
exec empdetails 1
这里,exec是执行存储过程的命令,empdetails是过程名称,1是员工ID。执行存储过程后,可以看到记录被显示出来。
创建一个新的VB6项目,并在表单上按照以下顺序放置控件:
在“Project”菜单中点击“References”,选择“Microsoft ActiveX Data Objects 2.5 Library”,然后点击OK。
在“General Declaration”部分(点击代码窗口顶部),输入以下代码:
Option Explicit
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cmd As ADODB.Command
Dim str_empid, strconnect As String
Option Explicit强制在程序中声明所有使用的变量(良好的编程实践),con是连接对象,rs是记录集对象,cmd是命令对象,用于指定命令类型和过程名称,str_empid用于存储员工ID,strconnect用于存储连接字符串。
在表单加载事件(Form_Load)中,输入以下代码:
Private Sub Form_Load()
strconnect = "Provider=SQLOLEDB;Data Source=suj;Initial Catalog=Northwind"
con.Open strconnect, "sa", ""
End Sub
这里,SQLOLEDB是数据库提供者,suj是系统或计算机名称(在情况下会有所不同),Northwind是数据库名称,strconnect是连接字符串,sa是用户名,密码为空(除非已更改)。con.Open打开数据库连接。
在命令按钮点击事件(cmd_get_Click)中,输入以下代码:
Private Sub cmd_get_Click()
str_empid = txt_empid.Text
Set cmd = New ADODB.Command
cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "empdetails"
cmd.Parameters.Append cmd.CreateParameter("empid", adVarChar, adParamInput, 6, str_empid)
Set rs = cmd.Execute
If Not rs.EOF Then
txt_firstname = rs.Fields(0)
txt_title = rs.Fields(1)
txt_address = rs.Fields(2)
End If
Set cmd.ActiveConnection = Nothing
End Sub
这里,首先将员工ID的值(在文本框txt_empid中)赋给str_empid。应该设置cmd为新的命令对象,并指定要使用的连接(con),命令类型(adCmdStoredProc - 用于存储过程),命令文本(empdetails - 存储过程名称),参数和值(empid - 参数名称,str_empid - 员工ID值)。之后,执行cmd并将其值赋给rs(ADODB Recordset对象)。如果记录集(rs)包含一些值,这些值将被分配到适当的文本框中。最后,将cmd的连接设置为无。
执行程序(F5)。输入员工ID并点击Get按钮,应该得到以下类似的结果:
输出参数允许存储过程将值传回调用程序。这在设置一些状态值时非常有用,这些状态值可以在程序中使用。
以下是一个使用输出参数的示例:
CREATE PROCEDURE update_empdetails
@empid int,
@firstname varchar(30),
@title varchar(30),
@address varchar(100),
@result int OUTPUT
AS
Begin
update Employees set FirstName=@firstname, Title=@title, Address=@address WHERE EmployeeID=@empid;
set @result=1;
select @result;
End
GO
这里,@result int OUTPUT是输出参数,set @result=1将为参数设置一个值,select @result语句仅在SQL Query Analyser中查看结果时需要。
在SQL Query Analyser中测试过程:
update_empdetails 1, 'abc', 'Programmer', 'Address', 0
在VB中调用此过程:
在表单中添加另一个命令按钮(name=cmd_update, Caption=Update),如下所示:
在按钮点击事件中,输入以下代码:
Private Sub cmd_update_Click()
Dim res As Integer
Set cmd = New ADODB.Command
cmd.ActiveConnection = con
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "update_empdetails"
cmd.Parameters.Append cmd.CreateParameter("empid", adVarChar, adParamInput, 6, txt_empid.Text)
cmd.Parameters.Append cmd.CreateParameter("firstname", adVarChar, adParamInput, 30, txt_firstname.Text)
cmd.Parameters.Append cmd.CreateParameter("title", adVarChar, adParamInput, 30, txt_title.Text)
cmd.Parameters.Append cmd.CreateParameter("address", adVarChar, adParamInput, 100, txt_address.Text)
cmd.Parameters.Append cmd.CreateParameter("result", adInteger, adParamOutput)
cmd.Execute
res = cmd("result")
If (res = 1) Then
MsgBox "Updated Successfully"
End If
Set cmd.ActiveConnection = Nothing
End Sub
这里,cmd.Parameters.Append cmd.CreateParameter("result", adInteger, adParamOutput)用于指定输出参数。result - 输出参数名称,adInteger - 数据类型,adParamOutput - 参数方向枚举,用于输出参数。