如何在 VB6 中使用存储过程






4.60/5 (31投票s)
介绍如何在 Visual Basic 6.0 中使用一个简单的存储过程
引言
本文将介绍如何使用 Microsoft ActiveX Data Objects (ADO) 在 Visual Basic 6.0 中使用存储过程。我试图将其简化,并且我认为这对于那些想在 VB6 应用程序中尝试使用存储过程的人来说可能会有所帮助。我将在此解释
- 编写一个小型存储过程的步骤(在 SQL Server 2000 中)
- 如何在 VB 6.0 中使用该存储过程
- 在存储过程中使用输出参数
ActiveX Data Objects (ADO)
ActiveX Data Objects 为访问和操作数据的应用程序提供了一组对象、属性和方法。常用的 ADO 对象是 Connection
、Command
和 Recordset
。
连接对象
Connection
对象建立与数据源的连接。要创建 Connection
对象,我们需要提供 ODBC 数据源名称或 OLE DB 提供程序的名称。
- ADO 连接字符串 (CodeProject 文章,作者:Carlos Antollini)
命令对象
Command
对象是我们打算在数据源上执行的特定命令的定义。
CommandType
属性用于指定所用命令的类型。例如:
adCmdText
- 如果查询字符串是 SQL 命令,则使用此选项adCmdTable
- 如果查询字符串是表名,则使用此选项adCmdStoredProc
- 如果查询字符串是存储过程的名称,则使用此选项
Recordset 对象
Recordset
表示来自数据库表的所有记录集或已执行命令的结果。
创建和测试一个简单的存储过程
存储过程是预编译并作为单个任务处理的一个或多个 SQL 语句的集合。存储过程作为对象存在于数据库中,即使在执行完成后也是如此。要了解更多关于存储过程的信息,请查看这篇 CodeProject 文章。
- 您想了解的关于存储过程的所有信息 (作者:Himanshu Khatri)
示例
在 **SQL Enterprise Manager** 中,展开 **Northwind** 数据库,右键单击 **Stored Procedures**,然后选择 **New Stored Procedures**,接着编写以下示例并单击 OK 按钮。
CREATE PROCEDURE empdetails @empid int
AS
SELECT FirstName, Title, Address FROM Employees WHERE EmployeeID=@empid
GO
从 **Tools** 选项中,选择 **SQL Query Analyser** 并按如下方式测试存储过程:
exec empdetails 1
这里 exec 是执行存储过程的命令,empdetails
是过程名称,1
是员工 ID。执行该过程 (F5),您将看到显示的记录。
在 Visual Basic 6 中使用存储过程(示例)
- 在 Visual Basic 中创建一个新项目。
- 在窗体上,按照图示顺序放置以下控件:
- 三个标签(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
在这里,我们首先将
Textbox
(txt_empid
)中的员工 ID 值赋给str_empid
。您应该将cmd
设置为一个新的命令对象,并指定要使用的连接(con
)、命令类型(adCmdStoredProc
- 用于存储过程)、命令文本(empdetails
- 存储过程的名称)、参数和值(empid
- 参数名称,str_empid
- 员工 ID 值)。之后,我们执行cmd
并将值赋给rs
(ADODB Recordset 对象)。如果记录集(rs
)包含一些值,则这些值将被赋给相应的文本框。最后,将cmd
的连接设置为 None。 - 执行程序(F5)。输入员工 ID 并单击 Get 按钮,您应该会得到类似以下的输出:
在存储过程中使用 OUTPUT 参数
输出参数允许存储过程将值传回调用程序。
这对于设置可以在程序中使用的某些状态值很有用。
以下是一个使用输出参数的示例。
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;
EndGO
这里 @result int OUTPUT
是输出参数,set @result=1
将为该参数设置一个值,只有当您想在 **SQL Query Analyser** 中看到结果时,才需要 select @result
语句。
在 **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
– 参数方向Enum
,用于输出参数
res = cmd("result")
此语句将结果参数的值赋给
res
。 - 执行程序(F5)。输入员工 ID 并单击 Get 按钮。值将显示在文本框中,然后输入 First Name、Title 和 Address 的新值,并单击 Update 按钮,记录将被更新,您将收到一个消息框,提示“Updated Successfully”。
ADO 参考
- Microsoft Visual Basic 6.0 MCSD 培训教材分布式应用程序