65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 VB6 中使用存储过程

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.60/5 (31投票s)

2006 年 8 月 18 日

CPOL

5分钟阅读

viewsIcon

509442

downloadIcon

5661

介绍如何在 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 对象是 ConnectionCommandRecordset

连接对象

Connection 对象建立与数据源的连接。要创建 Connection 对象,我们需要提供 ODBC 数据源名称或 OLE DB 提供程序的名称。

命令对象

Command 对象是我们打算在数据源上执行的特定命令的定义。

CommandType 属性用于指定所用命令的类型。例如:

  • adCmdText - 如果查询字符串是 SQL 命令,则使用此选项
  • adCmdTable - 如果查询字符串是表名,则使用此选项
  • adCmdStoredProc - 如果查询字符串是存储过程的名称,则使用此选项

Recordset 对象

Recordset 表示来自数据库表的所有记录集或已执行命令的结果。

创建和测试一个简单的存储过程

存储过程是预编译并作为单个任务处理的一个或多个 SQL 语句的集合。存储过程作为对象存在于数据库中,即使在执行完成后也是如此。要了解更多关于存储过程的信息,请查看这篇 CodeProject 文章。

示例

在 **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 中使用存储过程(示例)

  1. 在 Visual Basic 中创建一个新项目。
  2. 在窗体上,按照图示顺序放置以下控件:
    • 三个标签(First Name, Title, Address)
    • 四个文本框(txt_empid, txt_firstname, txt_title, txt_address
    • 一个命令按钮(name= cmd_get, Caption=Get

      Sample screenshot
  3. 从 **Project** 菜单中,单击 **References**,然后选择 **Microsoft ActiveX Data Objects 2.5 Library**,最后单击 **OK**。
  4. 在 **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 用于存储连接字符串。

  5. 在窗体加载事件(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 打开数据库连接。

  6. 在命令按钮单击事件(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。

  7. 执行程序(F5)。输入员工 ID 并单击 Get 按钮,您应该会得到类似以下的输出:

    Sample screenshot

在存储过程中使用 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 中调用该过程

  1. 在您的窗体中添加另一个命令按钮(name= cmd_update, Caption=Update),如下所示:

    Sample screenshot

  2. 在按钮的单击事件中,输入以下代码:
    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

  3. 执行程序(F5)。输入员工 ID 并单击 Get 按钮。值将显示在文本框中,然后输入 First Name、Title 和 Address 的新值,并单击 Update 按钮,记录将被更新,您将收到一个消息框,提示“Updated Successfully”。

ADO 参考

  • Microsoft Visual Basic 6.0 MCSD 培训教材分布式应用程序
© . All rights reserved.