DataSet:
是一種離線存取機制,它在連線到資料庫後透過DataAdapter取得資料後,將完全的與資料庫斷線。
並且將所取得之資料表存放於系統中的記憶體中。
如果是需要連結多張資料表:比較適合使用DataSet + DataAdapter。
如果只是單一資料表查詢:比較適合使用Datareader。
DataTable 與 DataRow :
當執行完sql指令撈完資料後,DataSet會把每一張資料表以DataTable形式存於記憶體中等待日後應用。
而每一張DataTable的形式如下:
Row:(橫的一列)代表每一筆紀錄。
column:(直的一行)代表每一欄資料欄。
定義完後來個實際的例子 我把資料庫中兩張資料表(test,test1這兩張資料表撈出後放入DataSet中)
後置程式碼:
protected void DBInit()
{
SqlConnection Conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["testConnectionString"].ConnectionString);
SqlDataAdapter myAdapter = null;
try
{
//使用SqlDataAdapter不需要開啟以及關閉連線
myAdapter = new SqlDataAdapter("select * from test", Conn);
myAdapter = new SqlDataAdapter("select * from test1", Conn);
//宣告一個dataset
DataSet ds = new DataSet();
//SqlDataAdapter將test以及test2資料表加入同一個DataSet中
myAdapter.Fill(ds, "test");
myAdapter.Fill(ds, "test1");
//dataset由許多 DataTable 所組成,目前只放入兩個tables
//第一個為test之資料表
//第二個為test1之資料表
DataTable myTable = ds.Tables["test"]; //將第一個資料表資料撈出丟給 DataTable名為myTable
DataTable myTable2 = ds.Tables["test1"];
string myString1, myString2;
myString1 = "";
myString1 = myString1 + myTable.Rows[1]["id"];
Label1.Text = myString1;
myString2 = "";
myString2 = myString2 + myTable2.Rows[1]["id"];
Label2.Text = myString2;
}
catch(Exception ex)
{
Response.Write("<hr />" + ex.ToString() + "<hr />");
}
}
印出結果:
我們可以取得兩張tables的資料
2 2