UML软件工程组织

如何使用 ADO.NET 和 Visual Basic .NET 连接到数据库并运行命令
 

适用于

有关本文的 Microsoft Visual C# .NET 版本,请参阅 306636
有关本文的 Microsoft Visual J# .NET 版本,请参阅 322045
有关本文的 Microsoft Visual Basic 6.0 版本,请参阅 168336
本文引用下面的 Microsoft .NET Framework 类库命名空间:
  • System.Data
  • System.Data.SqlClient

本任务的内容

概要

本文介绍如何通过 Visual Basic .NET 控制台应用程序使用 ADO.NET 连接数据库并运行命令(如 UPDATE、INSERT 或 DELETE 命令)。

返回页首

要求

下表列出了推荐使用的硬件、软件、网络基础结构以及所需的 Service Pack:
  • Microsoft Windows XP、Microsoft Windows Server 2003、Microsoft Windows 2000 Professional、Microsoft Windows 2000 Server、Microsoft Windows 2000 Advanced Server 或 Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
本文假定您熟悉下列主题:
  • 数据库术语
  • 结构化查询语言 (SQL)
返回页首

如何运行命令

可以向数据库发出命令,以针对数据存储区执行操作,它包括可向数据库发出的任何语句。可以使用 OleDbCommandSqlCommand 类获取向数据存储区发出的命令,OleDbCommand 可以是数据存储区所特有的。本文介绍了 ADO.NET 中的 SqlClient 类(用于连接到运行 Microsoft SQL Server 的计算机)和 OleDb 类(用于装有 OLE DB 或 ODBC 驱动程序的任何数据库)。然而,对于这两个类来说,该代码通常是相同的。

通过使用 ADO,可通过 CommandConnectionRecordset 对象发出命令。在 ADO.NET 中,只有 Command 对象(SqlCommandOleDbCommand)运行命令。

若要运行命令,请按照下列步骤操作:
  1. 按照下列步骤在 Visual Basic .NET 中创建新的控制台应用程序:
    1. 启动 Visual Studio .NET。
    2. 文件菜单上,指向新建,然后单击项目
    3. 新建项目对话框中,单击项目类型下面的 Visual Basic 项目,然后单击模板下面的控制台应用程序
  2. 确保项目中包含对 System.Data 命名空间的引用,如果不包含,请添加一个引用。
  3. SystemSystem.Data 命名空间上使用 Imports 语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。也可以包含 System.Data.SqlClientSystem.Data.OleDb,具体取决于所使用的命名空间。
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    					
  4. 在创建与数据库的连接之前,必须具有一个连接字符串。连接字符串包含建立数据库连接所需的所有信息,包括服务器名称、数据库名称、用户 ID 以及密码。例如,以下连接字符串指向运行 SQL Server 的本地计算机,帐户为 <username>,密码为增强密码:

    对于 OleDb 连接:
    Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)
    						
    对于 SqlClient 连接:
    User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)
    						
    注意:如果需要有关如何确定数据库的连接字符串的更多帮助,请在以下 Microsoft Web 站点的 Microsoft Developer Network (MSDN) 库中搜索“ConnectionString”:

    http://search.microsoft.com/us/dev/default.asp

  5. Visual Studio 创建一个模块和一个空的 Main() 过程。在该过程中,声明一个字符串变量并存储数据库的相应连接字符串:
    Sub Main()
        Dim sConnectionString As String _
            = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)"
    End Sub
    					
  6. 使用此连接字符串,新建 OleDbConnectionSqlConnection 对象,并调用其 Open 方法以建立与数据库的连接:
    Dim objConn As New SqlConnection(sConnectionString)
       objConn.Open()
    					
  7. 创建 SqlCommandOleDbCommand 对象,并传入要运行的命令以及在上一步中创建的连接对象。以下示例代码将传入 INSERT 语句:
    Dim sSQL As String = "INSERT INTO Employee " & _
      "(emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)" & _
      "VALUES ('MSD12923F', 'Duncan', 'W', 'Mackenzie', " & _ 
               "10, 82,'0877','2001-01-01')"
    Dim objCmd As New SqlCommand(sSQL, objConn)
    					
  8. 在创建 SqlCommandOleDbCommand 对象之后,可调用 ExecuteNonQuery 方法以运行它所表示的命令。ExecuteNonQuery 用于不返回任何结果的命令(如 DELETE、UPDATE 和 INSERT 语句)。如果在运行 Execute 语句时不引发任何异常(请参见下列代码),则说明已针对数据库成功执行了该命令。
    objCmd.ExecuteNonQuery()
    					
  9. 保存项目。在调试菜单上,单击启动以针对数据库运行命令。
返回页首

如何使用参数

针对数据库运行命令(例如,UPDATE、INSERT 和 DELETE 语句或存储过程调用)时,通常将这些命令参数化。这样,命令就可以一次创建、多次执行,执行时使用插入的不同值来代替参数。请考虑与上面部分中使用的 INSERT 语句相对应的 DELETE 语句:
Dim sSQL As String = "DELETE FROM Employee WHERE emp_id = @emp_id"
				
此 DELETE 语句中的参数名称(“@emp_id”)表示一个参数,每次运行该命令时,可用不同的值替换该参数。

若要在命令中使用参数,请按照下列步骤操作:
  1. 创建 OleDbConnectionSqlConnection 对象(如“如何运行命令”一节所述)。
  2. 用占位符(例如,“@emp_id”或“@fname”)替换这些值,以使命令文本使用参数。请参见这些步骤前面的 DELETE 语句作为示例。
  3. 创建 OleDbCommandSqlCommand 对象,并传入在第 1 步中创建的连接对象以及包含参数占位符的命令文本。
  4. 对于每个参数,在命令对象的参数集中添加一个参数对象。对于每个参数,必须指定名称和数据类型。
    objCmd.Parameters.Add("@emp_id", SqlDbType.Char, 9)
    					
  5. 存储过程可以使用返回值和输出参数的参数。运行查询之前,还必须为每个输入参数设置值:
    objCmd.Parameters.Item("@emp_id").Value = "MSD12923F"
    					
  6. 按照以下方式运行查询:
    Try
        objCmd.ExecuteNonQuery()
        Console.WriteLine("Record Deleted")
    Catch e As Exception
        Console.WriteLine(e.ToString)
    End Try
    Console.WriteLine("Record Deleted")
    Console.Read()
    					
返回页首

完整代码列表

Imports System
Imports System.Data
Imports System.Data.SqlClient

Module Module1
    Sub Main()
        AddRecord()
        RemoveRecord()
        Pause()
    End Sub

    Sub Pause()
        Console.WriteLine("Press Enter To Continue...")
        Console.ReadLine()
    End Sub

    Sub AddRecord()
        Dim sConnectionString As String _
            = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)"
        Dim objConn As New SqlConnection(sConnectionString)
        objConn.Open()
        Dim sSQL As String = "INSERT INTO Employee " & _
          "(emp_id, fname, minit, lname, job_id, job_lvl, pub_id, hire_date)" & _
          "VALUES ('MSD12923F', 'Duncan', 'W', 'Mackenzie', " & _
                   "10, 82,'0877','2001-01-01')"

        Dim objCmd As New SqlCommand(sSQL, objConn)
        Try
            objCmd.ExecuteNonQuery()
        Catch e As Exception
            Console.WriteLine(e.Message)
        End Try
        Console.WriteLine("Record Added")
    End Sub

    Sub RemoveRecord()
        Dim sConnectionString As String _
            = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)"
        Dim objConn As New SqlConnection(sConnectionString)
        objConn.Open()
        Dim sSQL As String = "DELETE FROM Employee WHERE emp_id = @emp_id"
        Dim objCmd As New SqlCommand(sSQL, objConn)

        objCmd.Parameters.Add("@emp_id", SqlDbType.Char, 9)
        objCmd.Parameters.Item("@emp_id").Value = "MSD12923F"

        Try
            objCmd.ExecuteNonQuery()
            Console.WriteLine("Record Deleted")
        Catch e As Exception
            Console.WriteLine(e.ToString)
        End Try
        Console.WriteLine("Record Deleted")
        Console.ReadLine()
    End Sub

End Module
				
返回页首

参考

有关如何使用 ADO.NET、数据库命令和存储过程的更多信息,请访问以下 Microsoft Web 站点:

SQL Server 2000 存储过程
http://msdn.microsoft.com/library/psdk/sql/cm_8_des_07_31vb.htm

MSDN Voices 专栏:“再谈在 .NET 应用程序中使用 ADO”
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data08092001.asp

面向 ADO 程序员的 ADO.NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndotnet/html/adonetprogmsdn.asp

MSDN Online .NET 开发人员中心
http://msdn.microsoft.com/net

有关 ADO.NET 或 Visual Basic .NET 的更多常规信息,请访问以下 MSDN 新闻组:

microsoft.public.dotnet.framework.adonet

microsoft.public.dotnet.languages.vb

返回页首
 

版权所有:UML软件工程组织