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