(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];从而获得具体的某一项。