資料集 物件的 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
本文假設您已熟悉下列主題:
填滿資料集
使用各種不同的物件從該
System.Data 命名空間內您可以連接至資料庫伺服器,執行一個查詢和已放入
DataSet 物件的結果。
資料集 是中斷連接的物件。因此,載入資料後資料庫的連接不再使用直到您想要載入更多的資料,或以您對您資訊的記憶體中複本所做的變更更新伺服器。
若要將從資料庫載入
資料集 資料,請依照下列步驟執行:
- 啟動 Visual Studio.NET。
- 在 Visual C#.NET 中建立新的主控台應用程式專案時。Visual Studio.NET] 會為您,建立靜態類別,連同一個空的 Main 程序。
- 請確定專案參考 系統 及 System.Data 命名空間。
- 使用 using 陳述式上 系統、 System.Data 及 System.Data.SqlClient 命名空間讓您不需要限定這些命名空間在稍後的程式碼中的宣告。您必須使用這些陳述式,在任何其他宣告之前
using System;
using System.Data;
using System.Data.SqlClient;
- 第一個步驟,從資料庫取得資料至 資料集 是建立需要一個 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();
- 建立代表資料庫和 資料集 物件之間連結的 資料配接器 物件。您可以指定 SQL 或另一種用來做為建構函式物件的 資料配接器 的一部分擷取資料的命令。這個範例使用 SQL 陳述式,從 Authors 資料表 Pubs 資料庫中擷取記錄
SqlDataAdapter daAuthors
= new SqlDataAdapter("Select * From Authors", objConn);
- 您必須宣告並建立一個在哪個時間您可以提供整個 資料集 的名稱才能開始載入任何資料的 資料集 物件的執行個體。名稱可能包含數個不同的資料表
DataSet dsPubs = new DataSet("Pubs");
- 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");
- 現在可以為個別 DataTable 物件的 資料集資料表 集合中資料了。如果您在呼叫 FillSchema 和 填滿 指定的資料表名稱,您可以使用該名稱來存取您想要的特定表格
DataTable tblAuthors;
tblAuthors = dsPubs.Tables["Authors"];
- 您可以使用 For Each 迴圈來逐一,透過的所有 資料列 集合的 DataTable 內 DataRow 物件。這可讓您存取資料表的每個資料列。您可以有 '0' 的第一個資料行位置) 依名稱或位置索引存取的資料行。例如:
foreach (DataRow drCurrent in tblAuthors.Rows)
{
Console.WriteLine("{0} {1}",
drCurrent["au_fname"].ToString(),
drCurrent["au_lname"].ToString());
}
Console.ReadLine();
- 儲存您的專案。在 [偵錯] 功能表上按一下 [[開始] 以執行您的專案,並確定其運作]。
完成程式碼清單
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 網站: