(3)C#之ADO.Net 数据集(DataSet)
2015-10-20 09:59
585 查看
DataSet是ADO.Net的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。(来自百度百科)
下面写一段代码来示例DataSet的用法:(下面这段代码是一个按钮的Click事件)
从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];从而获得具体的某一项。
下面写一段代码来示例DataSet的用法:(下面这段代码是一个按钮的Click事件)
using(SqlConnection conn = new SqlConnection("Data Source=PC201507182002\\SQLEXPRESS;Initial Catalog=123456;Integrated Security=True")) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from student where name =@name"; cmd.Parameters.Add(new SqlParameter("@name",textBox1.Text)); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); DataTable dt = ds.Tables[0]; DataRowCollection rows = dt.Rows; for (int i = 0; i < rows.Count; i++) { DataRow dr = rows[i]; string name = (string)dr[0]; string name1 = (string)dr[1]; MessageBox.Show("name:"+name+"----name1:"+name1); } } }
从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];从而获得具体的某一项。
相关文章推荐
- c#泛型方法
- C#语言之“string格式的日期时间字符串转为DateTime类型”的方法
- 【术】c#字典Dictionary自定义类作为key键
- C# StreamReader的指针问题
- 设计模式----单例模式UML图和代码实现(C#&JAVA)
- C#实现 ffmpeg视频转码、播放
- C#中数组、ArrayList和List三者的区别
- c#中convert和parse的区别个人推荐使用convert多
- C# 文件大小
- (原创)c#学习笔记04--流程控制01--布尔逻辑01--布尔赋值运算符
- 【C#】——委托与事件
- c#webAPI几点注意
- C# 代码转换到Python
- C# 5.0 与 .Net 4.5 学习(二)Deadlocks死锁
- C#生成PDF页脚第几页共几页
- C#命令模式
- AXIS2客户端代码连接C#web service带ntlm认证
- C# Excel检验数据是否重复及Table检验数据是否重复
- c#中异步编程
- 在C#中创建和读取XML文件