有关本文的 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
本文假定您熟悉下列主题:
返回页首
如何运行命令
可以向数据库发出命令,以针对数据存储区执行操作,它包括可向数据库发出的任何语句。可以使用
OleDbCommand 或
SqlCommand
类获取向数据存储区发出的命令,
OleDbCommand
可以是数据存储区所特有的。本文介绍了 ADO.NET
中的
SqlClient 类(用于连接到运行
Microsoft SQL Server 的计算机)和
OleDb
类(用于装有 OLE DB 或 ODBC
驱动程序的任何数据库)。然而,对于这两个类来说,该代码通常是相同的。
通过使用 ADO,可通过
Command、
Connection
或
Recordset 对象发出命令。在 ADO.NET
中,只有
Command 对象(
SqlCommand
或
OleDbCommand)运行命令。
若要运行命令,请按照下列步骤操作:
- 按照下列步骤在 Visual Basic .NET
中创建新的控制台应用程序:
- 启动 Visual Studio .NET。
- 在文件菜单上,指向新建,然后单击项目。
- 在新建项目对话框中,单击项目类型下面的
Visual Basic 项目,然后单击模板下面的控制台应用程序。
- 确保项目中包含对 System.Data
命名空间的引用,如果不包含,请添加一个引用。
- 在 System 和 System.Data
命名空间上使用 Imports
语句,这样,在后面的代码中就无需限定这些命名空间中的声明了。也可以包含
System.Data.SqlClient 或 System.Data.OleDb,具体取决于所使用的命名空间。
Imports System
Imports System.Data
Imports System.Data.SqlClient
- 在创建与数据库的连接之前,必须具有一个连接字符串。连接字符串包含建立数据库连接所需的所有信息,包括服务器名称、数据库名称、用户
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
- Visual Studio 创建一个模块和一个空的 Main()
过程。在该过程中,声明一个字符串变量并存储数据库的相应连接字符串:
Sub Main()
Dim sConnectionString As String _
= "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=(local)"
End Sub
- 使用此连接字符串,新建 OleDbConnection
或 SqlConnection 对象,并调用其 Open
方法以建立与数据库的连接:
Dim objConn As New SqlConnection(sConnectionString)
objConn.Open()
- 创建 SqlCommand 或 OleDbCommand
对象,并传入要运行的命令以及在上一步中创建的连接对象。以下示例代码将传入
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)
- 在创建 SqlCommand 或 OleDbCommand
对象之后,可调用 ExecuteNonQuery
方法以运行它所表示的命令。ExecuteNonQuery
用于不返回任何结果的命令(如 DELETE、UPDATE 和
INSERT 语句)。如果在运行 Execute
语句时不引发任何异常(请参见下列代码),则说明已针对数据库成功执行了该命令。
objCmd.ExecuteNonQuery()
- 保存项目。在调试菜单上,单击启动以针对数据库运行命令。
返回页首
如何使用参数
针对数据库运行命令(例如,UPDATE、INSERT 和 DELETE
语句或存储过程调用)时,通常将这些命令参数化。这样,命令就可以一次创建、多次执行,执行时使用插入的不同值来代替参数。请考虑与上面部分中使用的
INSERT 语句相对应的 DELETE 语句:
Dim sSQL As String = "DELETE FROM Employee WHERE emp_id = @emp_id"
此 DELETE 语句中的参数名称(“@emp_id”)表示一个参数,每次运行该命令时,可用不同的值替换该参数。
若要在命令中使用参数,请按照下列步骤操作:
- 创建 OleDbConnection 或 SqlConnection
对象(如“如何运行命令”一节所述)。
- 用占位符(例如,“@emp_id”或“@fname”)替换这些值,以使命令文本使用参数。请参见这些步骤前面的
DELETE 语句作为示例。
- 创建 OleDbCommand 或 SqlCommand
对象,并传入在第 1
步中创建的连接对象以及包含参数占位符的命令文本。
- 对于每个参数,在命令对象的参数集中添加一个参数对象。对于每个参数,必须指定名称和数据类型。
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.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
返回页首