您目前已離線,請等候您的網際網路重新連線

如何使用 ADO.NET 2005 與 Visual C# 2005 或使用 ADO.NET 與 Visual C# .NET 連接到資料庫並執行命令

本文曾發行於 CHT306636
如需本文的 Microsoft Visual Basic .NET 版本,請參閱 301075
如需本文的 Microsoft Visual J# .NET 版本,請參閱 322045

本文參照下列 Microsoft .NET Framework 類別庫 (Class Library) 的命名空間:
  • System.Data
  • System.Data.SqlClient
結論
本文將逐步告訴您,如何使用 ADO.NET 2005 或 ADO.NET 連接到資料庫並執行命令。

需求

下面清單列出了建議使用的硬體、軟體、網路基礎架構以及所需安裝的 Service Pack:
  • Microsoft Windows Server 2003、Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server 或 Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio 2005 或 Microsoft Visual Studio .NET
本文假設您已熟悉下列主題:
  • 資料庫術語
  • 結構化查詢語言 (SQL)

如何執行命令

命令是針對資料庫發出的,以便對資料存放區採取動作以及包含可以對資料庫發出的任何陳述式。您可以使用 OleDbCommandSqlCommand 類別來取得資料存放區的命令,而 OleDbCommand 可以特別針對資料存放區。本文件將示範 ADO.NET 中的 SqlClient 類別 (連接到執行 Microsoft SQL Server 的電腦) 以及 OleDb 類別 (適用於有 OLE DB 或 ODBC 驅動程式可供使用的任何資料庫)。然而,兩者的程式碼通常是相同的。

利用 ADO,您可以透過 CommandConnectionRecordset 物件發出命令。在 ADO.NET 中,只有 Command 物件 (SqlCommandOleDbCommand) 會執行命令。

如果要執行命令,請依照下列步驟執行:
  1. 依照下列步驟執行,在 Microsoft Visual C# 2005 或 Microsoft Visual C# .NET 中建立新的主控台應用程式:
    1. 啟動 Microsoft Visual Studio 2005 或 Microsoft Visual Studio .NET。
    2. [檔案] 功能表上,指向 [新增],然後按一下 [專案]
    3. [新增專案] 對話方塊中,按一下 [專案類型] 下方的 [Visual C# 專案],然後按一下 [範本] 下方的 [主控台應用程式]

      注意 在 Visual Studio 2005 中,按一下 [新增專案] 對話方塊中 [專案類型] 下方的 [Visual C#],然後按一下 [範本] 下方的 [主控台應用程式]
  2. 確定您的專案含有 System.Data 命名空間的參照,如果沒有,請新增參照。
  3. SystemSystem.Data 命名空間使用 using 陳述式,如此您就不必在後面的程式碼中限定這些命名空間的宣告。您也可以加入 System.Data.SqlClientSystem.Data.OleDb,視您目前正在使用的是何者而定。
    using System;using System.Data;using System.Data.SqlClient;					
  4. 您必須先有連線字串,才能建立資料庫連線。連線字串包含建立資料庫連線所需的所有資訊,包括伺服器名稱、資料庫名稱、使用者識別碼以及密碼。例如,下列連線字串指向執行 SQL Server 的本機電腦:

    如果是 OleDb 連線:

    注意 User ID <UID> 必須具備適當的權限,才能在資料庫上執行這些操作。
    Provider=SQLOLEDB.1;User ID=<UID>;Initial Catalog=pubs;Data Source=(local)						
    如果是 SqlClient 連線:
    User ID=<UID>;Initial Catalog=pubs;Data Source=(local)						
    注意 如果您在決定資料庫的連線字串時,需要其他協助,請在下面的 Microsoft Developer Network (MSDN) Library 中搜尋「ConnectionString」:
  5. Visual Studio 會建立一個靜態類別,和一個空的 Main() 程序。請宣告一個字串變數,將適合資料庫的連線字串存放在這個程序中。

    注意 User ID <UID> 必須具備適當的權限,才能在資料庫上執行這些操作。
    class Class1{	static void Main(string[] args)	{		string sConnectionString = "User ID=<UID>;Initial Catalog=pubs;Data Source=(local)";	}}					
  6. 使用此連線字串來建立新的 OleDbConnectionSqlConnection 物件,然後呼叫其 Open 方法以建立您的資料庫連線:
    SqlConnection objConn = new SqlConnection(sConnectionString);objConn.Open();					
  7. 建立 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);					
  8. 在建立 SqlCommandOleDbCommand 物件之後,就可以呼叫 ExecuteNonQuery 方法,執行它所代表的命令。ExecuteNonQuery 是專門針對不傳回任何結果的命令 (例如 DELETE、UPDATE 和 INSERT 陳述式) 設計的。如果陳述式在執行時沒有擲回例外狀況 (請參閱下列程式碼),表示已經對資料庫順利執行命令。
    objCmd.ExecuteNonQuery();					
  9. 儲存專案。在 [偵錯] 功能表上,按一下 [開始] 對資料庫執行命令。

如何使用參數

當您對資料庫執行命令時 (例如 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 物件,然後傳入您在第一個步驟中建立的連線物件以及含有參數保留位置的命令文字。
  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");					

完整的程式碼清單

注意 在執行此程式碼之前,必須先將 User ID =<UID> 變更為正確的值。請確定 <UID> 具有適當的權限可以在資料庫上執行此操作。
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=<UID>;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=<UID>;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 網站:
SQL Server 2000 預存程序 (英文)
http://msdn2.microsoft.com/en-us/library/aa214299(SQL.80).aspx

「Diving into Data Access」MSDN Voices 專欄
http://msdn2.microsoft.com/en-us/library/ms810295.aspx

ADO.NET for the ADO Programmer
http://msdn2.microsoft.com/en-us/library/ms973217.aspx

MSDN Online .NET Developer Center
http://msdn.microsoft.com/net
如需詳細資訊,請參閱下列書籍:
Sharp, John 和 Jon Jagger.《Microsoft Visual C# .NET Step by Step》Microsoft Press, 2003.
如需詳細資訊,請參閱下列 Microsoft Training & Certification 課程:
2389 使用 ADO.NET 進行程式設計 (英文)
http://www.microsoft.com/learning/syllabi/en-us/2389BFinal.mspx
內容

文章識別碼:306636 - 最後檢閱時間:08/17/2007 02:22:00 - 修訂: 4.4

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# 2005

  • kbhowtomaster kbsqlclient kbsystemdata KB306636
意見反應