VB6使用ADO执行存储过程

在Visual Basic 6.0中使用Microsoft ActiveX Data Objects (ADO)可以方便地与数据库进行交互。本文将介绍如何在VB6应用程序中使用存储过程,包括创建存储过程、在VB6中调用存储过程以及使用输出参数。

创建简单的存储过程

存储过程是一组预编译的SQL语句,它们作为一个单一任务执行。存储过程在数据库中以对象的形式存在,即使在执行完成后也是如此。

SQL Server2000中,可以通过以下步骤创建一个简单的存储过程

  1. 打开SQL Enterprise Manager,展开Northwind数据库
  2. 右键点击“Stored Procedures”,选择“New Stored Procedures”。
  3. 编写以下示例代码并点击OK按钮:
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中使用存储过程

创建一个新的VB6项目,并在表单上按照以下顺序放置控件:

  • 三个标签(First Name, Title, Address)
  • 四个文本框(txt_empid, txt_firstname, txt_title, txt_address)
  • 一个命令按钮(name=cmd_get, Caption=Get)

在“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 - 参数方向枚举,用于输出参数。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485