306636 HOW TO:使用 ADO.NET 和 Visual C# .NET 连接到数据库并运行命令 (From MKBA)

本文介绍了在 C#.NET 环境下连接 SQL Server 数据库的操作。包括运行命令的步骤,如创建控制台应用程序、引用命名空间、设置连接字符串、建立连接、执行 SQL 语句等;还说明了使用参数的方法,最后给出了完整代码列表及相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文的发布号曾为 CHS306636
有关本文的 Microsoft Visual Basic .NET 版本,请参见 CHS301075

本任务的内容

概要

本文介绍如何使用 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)
返回页首

如何运行命令

对数据库发出命令,以便对数据存储区执行操作。 命令包括任何可以对数据库发出的语句。可使用 OleDbCommandSqlCommand 类获取对后端数据存储区的命令, OleDbCommand 可以是特定于数据存储区的。本文涵盖了 ADO.NET 中的 SqlClient 类(用于连接到 SQL Server)和 OleDb 类(用于任何具有 OLE DB 或 ODBC 可用驱动程序的数据库),但总的来说,这两个类的代码是相同的。

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

若要运行命令,请按照下列步骤操作:
  1. 打开 Visual Studio .NET。
  2. 在 C# 中新建控制台应用程序。
  3. 确保项目中包含对 System.Data 命名空间的引用,如果不包含,请添加一个引用。
  4. System System.Data 命名空间使用 using 语句,这样,以后就不需要在代码中限定这些命名空间中的声明了。还可包括 System.Data.SqlClient System.Data.OleDb,这取决于您要使用哪一个。
    using System;
    using System.Data;
    using System.Data.SqlClient;
  5. 在创建与数据库的连接之前,需要一个连接字符串。连接字符串包含建立数据库连接需要的所有信息,包括服务器名称、数据库名称、用户 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”,网址是:

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

  6. Visual Studio 将创建一个静态类和一个空的 Main() 过程。在该过程中,声明一个字符串变量并存储数据库的相应连接字符串:
    class Class1
    {
    	static void Main(string[] args)
    	{
    		string sConnectionString = 
    "User ID=sa;Initial Catalog=pubs;Data Source=(local)";
    	}
    }
  7. 使用此连接字符串,新建 OleDbConnectionSqlConnection 对象,并调用它的 Open 方法以建立与数据库的连接:
    SqlConnection objConn = new SqlConnection(sConnectionString);
    objConn.Open();
  8. 创建 SqlCommandOleDbCommand 对象,并传入要运行的命令和在上一步中创建的连接对象。以下示例代码将传入 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);
  9. 在创建 SqlCommandOleDbCommand 对象之后,可调用 ExecuteNonQuery 方法以运行它所表示的命令。ExecuteNonQuery 是为不返回任何结果的命令(如 DELETE、UPDATE 和 INSERT 语句)设计的。如果该语句在运行时不引发任何异常,则说明已针对数据库成功执行了该命令。
    objCmd.ExecuteNonQuery();
  10. 保存项目。从调试菜单中,单击开始,然后对数据库运行命令。
返回页首

如何使用参数

在对数据库运行命令(如 UPDATE、INSERT 和 DELETE 语句或对存储过程的调用)时,这些命令通常被参数化,这允许只创建一次命令,便可通过插入不同的值代替参数来实现多次执行。请考虑与上面使用的 INSERT 语句相对应的 DELETE 语句:
string sSQL = "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["@emp_id"].Value = "MSD12923F";
  6. 按照以下方式运行查询:
    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值