(3)C#之ADO.Net 數據集(DataSet)


DataSet是ADO.Net的中心概念。可以把DataSet當成內存中的數據庫,DataSet是不依賴於數據庫的獨立數據集合。(來自百度百科)

 
下面寫一段代碼來示例DataSet的用法:(下面這段代碼是一個按鈕的Click事件)
 1 using(SqlConnection conn = new SqlConnection("Data Source=PC201507182002\\SQLEXPRESS;Initial Catalog=123456;Integrated Security=True"))
 2             {
 3                 conn.Open();
 4                 using (SqlCommand cmd = conn.CreateCommand())
 5                 {
 6                     cmd.CommandText = "select * from student where name =@name";
 7                     cmd.Parameters.Add(new SqlParameter("@name",textBox1.Text));
 8                     SqlDataAdapter da = new SqlDataAdapter(cmd);
 9                     DataSet ds = new DataSet();
10                     da.Fill(ds);
11                     
12                     DataTable dt = ds.Tables[0];
13                     DataRowCollection rows = dt.Rows;
14                     for (int i = 0; i < rows.Count; i++)
15                     {
16                         DataRow dr = rows[i];
17                         string name = (string)dr[0];
18                         string name1 = (string)dr[1];
19  
20                         MessageBox.Show("name:"+name+"----name1:"+name1);
21                     }
22  
23  
24                 }
25             }

 

從SqlDataAdapter開始說起。
 
◇SqlDataAdapter對象在DataSet與數據之間起着橋接的作用。我們創建一個新的SqlDataAdapter對象da,在創建的同時把cmd傳給它。再創建一個DataSet對象ds。
 
◇然后在da.fill(ds)這一步,就執行了上面的那條select語句,並且把查詢結果(一張表)填充到ds中。(ds可以是一個龐大的數據集,可以存放多張表格,每次填充的時候就會在原有的表格數量上加1)。ds保存在內存中。
 
◇DataTable是個臨時保存數據的虛擬表格。接下來創建這個DataTable對象dt,同時把我們剛剛查詢到的那張表,也就是ds.Table[0]賦給dt。也就是  DataTable dt = ds.Tables[0];  這一條語句,其中ds.Table[];中括號里可以有很多種類型的參數,可以是索引型的,也可以是數組型的。
 
◇在創建DataRowCollection對象rows,並把dt.Rows賦給它。這個rows包含了該表格中所有的行信息。
 
◇最后創建DataRow對象dr,把rows分為row,也就是逐行的意思,可以通過row[索引|數組];來獲取具體的每一個項的values值。
 
◇注意:這個獲取到的值得類型是object類型,需要用(int)row[0];或者(string)row[0];來進行強制類型轉換。
 
總結,其實說白了就是一個逐層細分的過程,首先通過SqlDataAdapter交給DataSet,然后通過DataSet在細化到DataTable,在從DataTable中獲取到所有的DataRowCollection,再分給每個DataRow,最后通過DataRow的對象dr定位到該行的某一列項dr[0];從而獲得具體的某一項。
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM