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];從而獲得具體的某一項。