close

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 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(1) 人氣()