说到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