文章編號: 314145 - 上次校閱: 2007年3月29日 - 版次: 3.6

如何使用 Visual C#.NET 填入 DataSet 物件從一個資料庫

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

資料集 物件的 Microsoft.NET] 架構裡的資料存取的重要部分是資料表、 檢視表和關聯性可保留的記憶體中物件。本文將告訴您,如何使用一或多個資料庫查詢的結果填滿 DataSet 物件,以及如何載入到 DataSet 物件後存取該資料。

需求

下列清單列出建議的硬體、 軟體、 網路基礎結構及您需要的服務套件:
  • Microsoft Windows 2000 專業版,Windows 2000 Server,Windows 2000 進階伺服器或 Windows NT 4.0 伺服器
  • Microsoft SQL Server 7.0、 Microsoft SQL Server 2000 或 Microsoft 資料引擎與 Pubs 範例資料庫安裝
  • Microsoft Visual Studio.NET
本文假設您已熟悉下列主題:
  • 資料庫術語
  • 結構化的查詢語言 (SQL)

填滿資料集

使用各種不同的物件從該 System.Data 命名空間內您可以連接至資料庫伺服器,執行一個查詢和已放入 DataSet 物件的結果。資料集 是中斷連接的物件。因此,載入資料後資料庫的連接不再使用直到您想要載入更多的資料,或以您對您資訊的記憶體中複本所做的變更更新伺服器。

若要將從資料庫載入 資料集 資料,請依照下列步驟執行:
  1. 啟動 Visual Studio.NET。
  2. 在 Visual C#.NET 中建立新的主控台應用程式專案時。Visual Studio.NET] 會為您,建立靜態類別,連同一個空的 Main 程序。
  3. 請確定專案參考 系統System.Data 命名空間。
  4. 使用 using 陳述式上 系統System.DataSystem.Data.SqlClient 命名空間讓您不需要限定這些命名空間在稍後的程式碼中的宣告。您必須使用這些陳述式,在任何其他宣告之前
    using System;
    using System.Data;
    using System.Data.SqlClient;
    					
  5. 第一個步驟,從資料庫取得資料至 資料集 是建立需要一個 System.Data.SqlClient.SqlCommand 物件和連接字串的資料庫連接。連接字串,請依照下列程式碼中的連接位於本機電腦 (電腦執行程式碼) 的 SQL Server 伺服器。您必須修改適合您環境的這個連接字串。SqlConnection 物件建立之後呼叫 Open 以建立實際的資料庫連結該物件的方法
    string sConnectionString;
    sConnectionString = "Password=myPassword;User ID=myUserID;"
      					   + "Initial Catalog=pubs;"
    						+ "Data Source=(local)";
    SqlConnection objConn
    	= new SqlConnection(sConnectionString);
    objConn.Open();
    					
  6. 建立代表資料庫和 資料集 物件之間連結的 資料配接器 物件。您可以指定 SQL 或另一種用來做為建構函式物件的 資料配接器 的一部分擷取資料的命令。這個範例使用 SQL 陳述式,從 Authors 資料表 Pubs 資料庫中擷取記錄
    SqlDataAdapter daAuthors 
    	= new SqlDataAdapter("Select * From Authors", objConn);
    					
  7. 您必須宣告並建立一個在哪個時間您可以提供整個 資料集 的名稱才能開始載入任何資料的 資料集 物件的執行個體。名稱可能包含數個不同的資料表
    DataSet dsPubs = new DataSet("Pubs");
    					
  8. SqlDataAdapter 類別提供的兩個方法,填滿] 和 [FillSchema,重要載入此資料。這兩種方法會將資訊載入 資料集填滿 載入資料本身,並 FillSchema 載入所有可用的中繼資料 (例如資料行名稱、 主索引鍵和條件約束) 的特定表格的相關。處理資料載入的好方法是執行 FillSchema 後面跟著 填滿。例如:
    daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
    daAuthors.Fill(dsPubs,"Authors");
    						
    如果您只使用 填滿,您可以只載入基本的中繼資料所需來描述資料行名稱與資料型別。填滿] 方法不會載入主索引鍵資訊。若要變更這個預設行為,您可以將 MissingSchemaAction 屬性 資料配接器 物件的設定至 MissingSchemaAction.AddWithKey,而載入主索引鍵的中繼資料,連同預設資訊。例如:
    daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    daAuthors.Fill(dsPubs,"Authors");
    					
  9. 現在可以為個別 DataTable 物件的 資料集資料表 集合中資料了。如果您在呼叫 FillSchema填滿 指定的資料表名稱,您可以使用該名稱來存取您想要的特定表格
    DataTable tblAuthors;
    tblAuthors = dsPubs.Tables["Authors"];
    					
  10. 您可以使用 For Each 迴圈來逐一,透過的所有 資料列 集合的 DataTableDataRow 物件。這可讓您存取資料表的每個資料列。您可以有 '0' 的第一個資料行位置) 依名稱或位置索引存取的資料行。例如:
    foreach (DataRow drCurrent in tblAuthors.Rows)
    {
    	Console.WriteLine("{0} {1}",
    		drCurrent["au_fname"].ToString(),
    		drCurrent["au_lname"].ToString());
    }
    Console.ReadLine();
    					
  11. 儲存您的專案。在 [偵錯] 功能表上按一下 [[開始] 以執行您的專案,並確定其運作]。

完成程式碼清單

using System;
using System.Data;
using System.Data.SqlClient;

namespace PopulateDataSet
{
	/// <summary>
	/// Summary description for Class1.
	/// </summary>
	class Class1
	{
		static void Main(string[] args)
		{
			string sConnectionString;
			sConnectionString = "Password=myPassword;User ID=myUserID;"
								+ "Initial Catalog=pubs;"
								+ "Data Source=(local)";
			SqlConnection objConn
				= new SqlConnection(sConnectionString);
			objConn.Open();

			SqlDataAdapter daAuthors 
				= new SqlDataAdapter("Select * From Authors", objConn);
			DataSet dsPubs = new DataSet("Pubs");
			daAuthors.FillSchema(dsPubs,SchemaType.Source, "Authors");
daAuthors.Fill(dsPubs,"Authors");

			DataTable tblAuthors;
			tblAuthors = dsPubs.Tables["Authors"];

			foreach (DataRow drCurrent in tblAuthors.Rows)
			{
				Console.WriteLine("{0} {1}",
					drCurrent["au_fname"].ToString(),
					drCurrent["au_lname"].ToString());
			}
			Console.ReadLine();
		}
	}
}
				

?考

如關於 ADO.NET 的詳細資訊,DataSet 物件] 和 [SQL],請參閱以下列 Microsoft 網站:
"投擲到的資料存取 」 (由 Dino Esposito 的 MSDN 語音 欄)
http://msdn2.microsoft.com/en-us/library/ms810293.aspx (http://msdn2.microsoft.com/en-us/library/ms810293.aspx)

ADO 程式設計師的 ADO.NET
http://msdn2.microsoft.com/en-us/library/ms973217.aspx (http://msdn2.microsoft.com/en-us/library/ms973217.aspx)

MSDN 線上的.NET 開發人員中心
http://msdn.microsoft.com/en-us/netframework/default.aspx (http://msdn.microsoft.com/en-us/netframework/default.aspx)

這篇文章中的資訊適用於:
  • Microsoft ADO.NET 1.0
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 標準版
關鍵字:?
kbmt kbhowtomaster kbsqlclient kbsystemdata KB314145 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:314145? (http://support.microsoft.com/kb/314145/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。