DateReader读取数据

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”);
}

  

posted @ 2018-03-22 16:01  WhiteSpace  阅读(1258)  评论(0编辑  收藏  举报