DateReader对象提供了用循序的、只读的方式读取Command对象获取的数据结果集正是因为DateReader是以循序的方法连续地读取数据,所以DateReader会以独占的方式打开数据库连接。
由于DateReader只执行读取操作,并且每次只在内存缓冲区里存储结果集的一条数据,所以使用DateReader对象的效率比较高,如果查询大量数据,同时不需要随机访问和修改数据,DateReader是优先的选择。
DateReader对象属性
FieldCount属性表示记录中有多少字段
HasRows属性用来表示DateReader是否包含数据
IsClosed属性表示DateReader是否关闭
Close方法将DateReader对象关闭
GetDateTYpeName方法取得指定字段的数据形态
GetName方法取得指定字段的字段名称
GetOrdinal方法取得指定字段名称在记录中的顺序
GetValue方法取得指定字段的数据
GetValues方法取得全部字段的数据
Read方法读取下一条记录
string conn = "server=192.168.100.222;user=sa;pwd=p@ssw1rd;database=pwd1"; SqlConnection myconn = new SqlConnection(); myconn.ConnectionString = conn; try { myconn.Open(); string str = "select * from book"; SqlCommand mycom=new SqlCommand(str,myconn); SqlDataReader mdr; mdr = mycom.ExecuteReader(); if (mdr.HasRows) { Console.WriteLine("book表中有数据"); } else { Console.WriteLine("bookl表中没有数据"); } while (mdr.Read()) { Console.Write(mdr[0]+" "); Console.Write(mdr[1]+" "); Console.Write(mdr[2]+" "); Console.WriteLine(); } } catch (Exception ex) { Console.WriteLine(ex.Message.ToString()); } finally { myconn.Close(); } Console.ReadKey();
SqlDataReader不能实例化,因为没有构造函数
SqlDataReader dr=SqlCommand.ExecuteReader();
//为什么要这么写?SqlDataReader不能实例化,而SqlCommand.ExecuteReader方法返回了一个对象,(public SqlDataReader ExecuteReader();{return (SqlDataReader)内容})
实例1 判断PWD1表中是否是数据(提示;通过查询mytable返回DateReader对象,经HasRows属性判断mytable中是否有数据) static void Main(string[] args) { string str = "server=192.168.100.222;user=sa;pwd=p@ssw1rd;database=pwd1"; SqlConnection mycon = new SqlConnection(str); mycon.Open(); string sql = "select * from book"; SqlCommand mycom = new SqlCommand(sql,mycon); //声明DateReader SqlDataReader mydr; mydr = mycom.ExecuteReader(); //判断是否有数据 if (mydr.HasRows) { Console.WriteLine("pwd1中存在数据"); } else { Console.WriteLine("pwd1中不存在任何数据"); } //看看这个表里面有几个字段 Console.WriteLine(myder.fildcount); //看看dateReader是否关闭会显示false Console.WriteLine(mydr.islosed); mydr.Close(); //这次会显示true Console.WriteLine(mydr.islosed); mycon.Close(); Console.ReadKey(); ***以后写代码的时候这么写*** Try { 连接数据库和打开数据库就写在这里面 } Catch(exception ex) { //程序错误的时候会显示 Console.writelin(ex.message.tostring()); } Finally { //这里面写关闭数据库 } Getvalues //声明DateReader SqlDataReader mydr; mydr = mycom.ExecuteReader(); 首先声明一个object数组,因为object是所有类型的基类,一个数据表有int char varchar bit date……..等所以要用object基类 //声明object数组多长呢?那就需要我们的函数fielCount了,他能统计我们表中有多少个字段 Object [] myobj =new object[mydr.fielCount]; //全部显示myobj数组里面的数据,需要循环 Mydr.getValues(myobj); While(mydr.Read()) Foreach(obect outobj in myobj) { Mydr.getValues(myobj); Console.writeline(outobj+”\t”); }