本文的发布号曾为 CHS306636
概要
本文介绍如何使用 ActiveX 数据对象 (ADO) .NET 连接到数据库并运行命令。返回页首
要求
下面列出了推荐使用的硬件、软件、网络结构以及所需的 Service Pack:- Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server 或 Windows NT 4.0 Server
- Microsoft Visual Studio .NET
- 数据库术语
- 结构化查询语言 (SQL)
如何运行命令
对数据库发出命令,以便对数据存储区执行操作。 命令包括任何可以对数据库发出的语句。可使用 OleDbCommand 或 SqlCommand 类获取对后端数据存储区的命令, OleDbCommand 可以是特定于数据存储区的。本文涵盖了 ADO.NET 中的 SqlClient 类(用于连接到 SQL Server)和 OleDb 类(用于任何具有 OLE DB 或 ODBC 可用驱动程序的数据库),但总的来说,这两个类的代码是相同的。利用 ADO,可通过 Command、 Connection 或 Recordset 对象发出命令。在 ADO.NET 中,只有 Command 对象( SqlCommand 或 OleDbCommand)运行命令。
若要运行命令,请按照下列步骤操作:
- 打开 Visual Studio .NET。
- 在 C# 中新建控制台应用程序。
- 确保项目中包含对 System.Data 命名空间的引用,如果不包含,请添加一个引用。
- 对 System 和 System.Data 命名空间使用 using 语句,这样,以后就不需要在代码中限定这些命名空间中的声明了。还可包括 System.Data.SqlClient 或 System.Data.OleDb,这取决于您要使用哪一个。
using System; using System.Data; using System.Data.SqlClient;
- 在创建与数据库的连接之前,需要一个连接字符串。连接字符串包含建立数据库连接需要的所有信息,包括服务器名称、数据库名称、用户 ID 和密码。例如,以下连接字符串指向本地 SQL Server,帐户为“sa”,密码为空:
对于 OleDb 连接:Provider=SQLOLEDB.1;User ID=sa;Initial Catalog=pubs;Data Source=(local)
对于 SqlClient 连接:User ID=sa;Initial Catalog=pubs;Data Source=(local)
备注: 如果您在确定数据库的连接字符串时需要更多帮助,请在 MSDN 库中搜索“ConnectionString”,网址是: - Visual Studio 将创建一个静态类和一个空的 Main() 过程。在该过程中,声明一个字符串变量并存储数据库的相应连接字符串:
class Class1 { static void Main(string[] args) { string sConnectionString = "User ID=sa;Initial Catalog=pubs;Data Source=(local)"; } }
- 使用此连接字符串,新建 OleDbConnection 或 SqlConnection 对象,并调用它的 Open 方法以建立与数据库的连接:
SqlConnection objConn = new SqlConnection(sConnectionString); objConn.Open();
- 创建 SqlCommand 或 OleDbCommand 对象,并传入要运行的命令和在上一步中创建的连接对象。以下示例代码将传入 INSERT 语句:
string sSQL = "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')"; SqlCommand objCmd = new SqlCommand(sSQL,objConn);
- 在创建 SqlCommand 或 OleDbCommand 对象之后,可调用 ExecuteNonQuery 方法以运行它所表示的命令。ExecuteNonQuery 是为不返回任何结果的命令(如 DELETE、UPDATE 和 INSERT 语句)设计的。如果该语句在运行时不引发任何异常,则说明已针对数据库成功执行了该命令。
objCmd.ExecuteNonQuery();
- 保存项目。从调试菜单中,单击开始,然后对数据库运行命令。
如何使用参数
在对数据库运行命令(如 UPDATE、INSERT 和 DELETE 语句或对存储过程的调用)时,这些命令通常被参数化,这允许只创建一次命令,便可通过插入不同的值代替参数来实现多次执行。请考虑与上面使用的 INSERT 语句相对应的 DELETE 语句:string sSQL = "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["@emp_id"].Value = "MSD12923F";
- 按照以下方式运行查询:
try { objCmd.ExecuteNonQuery(); } catch (System.Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("Record Deleted");
完整代码列表
using System; using System.Data; using System.Data.SqlClient; /// <summary> /// Summary description for Class1. /// </summary> class Class1 { static void Main(string[] args) { AddRecord(); RemoveRecord(); Pause(); } static void Pause() { Console.WriteLine("Press Enter To Continue...."); Console.ReadLine(); } static void AddRecord() { string sConnectionString = "User ID=sa;Initial Catalog=pubs;Data Source=(local)"; SqlConnection objConn = new SqlConnection(sConnectionString); objConn.Open() string sSQL = "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')"; SqlCommand objCmd = new SqlCommand(sSQL,objConn); try { objCmd.ExecuteNonQuery(); } catch (System.Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("Record Added"); } static void RemoveRecord() { string sConnectionString = "User ID=sa;Initial Catalog=pubs;Data Source=(local)"; SqlConnection objConn = new SqlConnection(sConnectionString); objConn.Open(); string sSQL = "DELETE FROM Employee WHERE emp_id = @emp_id"; SqlCommand objCmd = new SqlCommand(sSQL,objConn); objCmd.Parameters.Add("@emp_id", SqlDbType.Char, 9); objCmd.Parameters["@emp_id"].Value = "MSD12923F"; try { objCmd.ExecuteNonQuery(); } catch (System.Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("Record Deleted"); } }返回页首
参考
有关使用 ADO.NET、数据库命令和存储过程的更多信息,请访问以下 Microsoft Web 站点:SQL Server 2000 存储过程
http://msdn.microsoft.com/library/psdk/sql/cm_8_des_07_31vb.htm
“深入探讨数据访问”MSDN 之声 专栏
http://msdn.microsoft.com/voices/data.asp
ADO 编程人员的 ADO.NET
http://msdn.microsoft.com/library/techart/adonetdev.htm
MSDN Online .NET 开发人员中心
http://msdn.microsoft.com/net
这篇文章中的信息适用于:
- Microsoft Visual C# .NET (2002)
最近更新: | 2002-2-21 (1.0) |
关键字 | kbhowto kbHOWTOmaster kbnokeyword KB306636 kbAudDeveloper |