DataReader只读
来源:互联网 发布:mysql大数据统计报表 编辑:程序博客网 时间:2024/06/16 07:06
说到DataReader只读时候,我们就会联想到这个函数经常与Command搭配使用。
Command中有三个方法:分别是ExecuteNonQuery(),ExecuteScalar(),ExecuteReader()。
则其中ExecuteReader()和DataReader搭配使用,主要用来读取显示大量数据。
DataReader对象提供了用顺序的、只读的方式读取Command对象获得的数据结果集。正是DataReader是以顺序的方式连续读取数据,所以DataReader会以独占的方式打开数据库连接。
DataReader只执行读操作,每次只在内存缓冲区里存储结果集中的读取一行数据,所以DataReader对象的效率比较高。如果只是查询大量的数据,不做任何修改的话。DataReader是个优先选择。
DataReader常用的属性
① FieldCount属性 : 表示里面有多少列字段
② HasRows属性 : 表示里面是否包含有数据
③ IsClosed : 表示DataReader是否关闭DataReader常用的方法
① Close(); : 将DataReader对象关闭。
② GetDataTypeName(); : 获取指定列字段的数据类型
③ GetName(); : 获取指定获取列名称
④ GetOrdinal(); : 获取指定列字段名称在表中的顺序
⑤ GetValue(); : 获取指定当前列字段的数据
⑥ GetValues(); : 获取当前所有列值来填充对象数组
⑦ Read(); : 读取下一行数据
其中Read()比较重要,在每次使用DataReader进行输出或者赋值时都需要进行读取下一行,不然会出现异常“在没有任何数据时进行无效的读取尝试”,原因是:DataReader每次都是执行数据之上的位置,所以每次执行前都需要进行Read()。
说这么多,我们用代码来解析这些属性和方法的用法吧。
下面以DataGridVied数据表格控件和ListView表格控件来读取数据。
首先链接数据库
string strcon = "server = XQ-20160210KQLE\\SA;uid = sa;pwd = 123456;database = JYXinXi"; SqlConnection conn = new SqlConnection(strcon); conn.Open();
DataGridView读取数据,采用DataReader
string selec = "select * from Staff"; SqlCommand com = new SqlCommand(selec, conn); SqlDataReader dr = com.ExecuteReader(); //HasRows; 表示里面是否包含数据 //GetName(int i); 表示获取列名称 //GetDataTypeName(int i); 表示获取列字段数据类型 //FieldCount; 表示里面有多少列字段 //GetValues(object[] values); 表示使用当前列值来填充对象数组 if (dr.HasRows) { DataTable dt = new DataTable(); //因为DataGridView接受的是Table类型的表,所以需要创建一个DataTable dt.Columns.Add("姓名", Type.GetType("System.String")); dt.Columns.Add("职业", Type.GetType("System.String")); dt.Columns.Add("性别", Type.GetType("System.String")); dt.Columns.Add("年龄", Type.GetType("System.Int32")); dt.Columns.Add("求职网址", Type.GetType("System.String")); dt.Columns.Add("民族", Type.GetType("System.String")); while (dr.Read())//执行下一行 { //DataReader 每次只能存储一条数据 object[] myobj = new object[dr.FieldCount]; //每次只给数组填充一行的数据 dr.GetValues(myobj); //行数据添加到表中 dt.Rows.Add(myobj); dataGridView1.DataSource = dt;//每次填充完毕刷新到DataGridView表格中显示 } dr.Close();//关闭DataReader链接
ListView读取数据,采用DataReader
//设置ListView表格属性 listView1.GridLines = true;//网格线 listView1.View = View.Details;//视图 listView1.FullRowSelect = true;//单击某项,是否选中所有子项 listView1.Scrollable = true;//滚动条 //设置Commnd和DataReader搭配使用 string listview = "select * from Staff"; SqlCommand listviewcomm = new SqlCommand(listview, conn); SqlDataReader listviewdr = listviewcomm.ExecuteReader(); //创建列标题 //第一种 ColumnHeader column2 = new ColumnHeader(); column2.Text = listviewdr.GetName(0); ColumnHeader column3 = new ColumnHeader(); column3.Text = listviewdr.GetName(1); ColumnHeader column4 = new ColumnHeader(); column4.Text = listviewdr.GetName(2); ColumnHeader column5 = new ColumnHeader(); column5.Text = listviewdr.GetName(3); ColumnHeader column6 = new ColumnHeader(); column6.Text = listviewdr.GetName(4); ColumnHeader column7 = new ColumnHeader(); column7.Text = listviewdr.GetName(5); listView1.Columns.AddRange(new ColumnHeader[] { column2, column3, column4, column5, column6, column7 }); //第二种 //listView1.Columns.Add(listviewdr.GetName(0)); //listView1.Columns.Add(listviewdr.GetName(1)); //listView1.Columns.Add(listviewdr.GetName(2)); //listView1.Columns.Add(listviewdr.GetName(3)); //listView1.Columns.Add(listviewdr.GetName(4)); //listView1.Columns.Add(listviewdr.GetName(5)); //设置表格内容 object[] obj = new object[listviewdr.FieldCount]; while (listviewdr.Read()) { ListViewItem lvi = new ListViewItem(); listviewdr.GetValues(obj);//DataReader里面的数据存入数组中 string[] listviewstr = new string[listviewdr.FieldCount];//创建数组,AddRange使用 for (int i = 1; i < listviewstr.Length; i++) { listviewstr[i] = obj[i].ToString();//把obj元素赋值给listviewstr } lvi.SubItems[0].Text = obj[0].ToString();//母项第一列须这样编写 lvi.SubItems.AddRange(listviewstr); listView1.Items.Add(lvi); } listviewdr.Close();
看了以上两种控件表格的显示代码后,我用DataAdapter数据适配器显示数据
DataSet ds = new DataSet();//创建一个DataSet string strda = "select * from Staff";//sql查询语句 SqlDataAdapter da = new SqlDataAdapter(strda, strcon);//实例适配器 da.Fill(ds, "员工表");//填充表格数据 DataGridView1.DataSource = ds.Table[0];
- DataReader只读
- datareader
- DataReader
- DataReader
- DataReader & DataSet
- DataReader--优点
- DataReader使用
- DataReader对象
- DataReader 组件
- DataReader 组件
- DataReader是什么?
- 使用DataReader
- net DataReader
- datareader dataset
- DataReader.NextResult()
- DataReader用法
- DataReader调用
- DataReader对象
- java多线程实现数据共享
- Alluxio(Tachyon) 集群独立运行模式安装遇到的问题(非root用户)
- LA 3514 The Ministers' Major Mess(2-SAT)
- ListView+CheckBox 选中状态错乱问题
- 4.搜索之路——solr部署到Tomcat
- DataReader只读
- CentOS 7.x安装配置
- 5.搜索之路——solr与lucene和nutch关系
- 设计原则——开放封闭原则(Open Close Principle)
- AS汇编器源码剖析-第3章-指令字符的识别
- 6.搜索之路——solr使用
- ListView添加HeadView后布局紊乱的问题
- Python3.5+PyQt5.6环境搭建
- Android View坐标系