C# 中 DataReader 访问数据

来源:互联网 发布:限制文件夹大小 linux 编辑:程序博客网 时间:2024/06/05 05:04
DataReader 对象提供了用顺序的,只读的方式读取Command对象获得的数据结果集,正是因为DataReader是以顺序的方式连续的读取数据,所有DataReader会以独占的方式打开数据库的连接

由于DataReader只执行读的操作(只读),并且每次只在内存缓冲区里存储结果集中的一条数据,所有使用DataReader的对象的效率比较高,如果要查询大量数据,同时不需要随机访问和修改数据,DataReader是优先的选择

DataReader 对象的常用属性
FieldCount 属性 表示记录中有多少字段
HasRows 属性 用来表示DataReader是否包含数据
IsClosed 属性 表示DataReader是否关闭

DataReader对象常用方法
Close 方法 将DataReader对象关闭
GetDataTypName 方法 取得指定的字段数据形态(类型)
GetName 方法 取得指定的字段数据名称
GetOrdinal 方法 取得指定字段名称在记录中的顺序
GetValue 方法 取得指定字段的数据
GetValues 方法 取得全部字段的数据
Read 方法 读取下一条记录
实例 : mytable01表中有Id,姓名(name),年龄(age),性别(gender),部门(department),几个字段,并且有几条语句
using System;using System.Data.SqlClient;namespace DataReaderDemo{    class Program    {        static void Main(string[] args)        {            string constr = "Server = .; user=name;pwd=mima;database=mysql";            SqlConnection myCon = new SqlConnection(constr);            try            {                myCon.Open();                string sql = "select * from mytable01 ";                SqlCommand mycom = new SqlCommand(sql, myCon);                //声明DataReader                SqlDataReader mydr;                mydr = mycom.ExecuteReader();                if (mydr.HasRows)                     {                    Console.WriteLine("mytable01中存在数据");                }                else                {                    Console.WriteLine("mytable01中不存在任何数据");                }                //----------------方法----------------------                Console.WriteLine("第一列的数据类型"+mydr.GetDataTypeName(0));                Console.WriteLine("获取对应列的名称:(第一列)"+mydr.GetName(0));                string mystr = "age";    //直接写会报异常,需要有个转换的过程                Console.WriteLine(mydr.GetOrdinal(mystr));                /*  此时将上面的15行的str,换为                 *   string sql = "select * from mytable01 where id=1";                if (mydr.Read())                {                    Console.WriteLine("取得指定字段的数据:" + mydr.GetValue(0));                }                 */                /*将15行的 str更改为:                 *  string sql = "select * from mytable01 where gender='男'";                object[] myobj = new object[mydr.FieldCount];                while(myde.Read()){                    mydr.GetValues(myobj);                    foreach (object item in myobj)                    {                        Console.Write(item + "\t");                        Console.WriteLine();                    }                 }                  */                //访问DataReader 对象时使用索引要比字段名称快很多                while (mydr.Read())                {                    Console.WriteLine(mydr[0].ToString()+",");                    Console.WriteLine(mydr[1].ToString() + ",");                    Console.WriteLine(mydr["gender"].ToString());                }                //----------------属性----------------------                Console.WriteLine("表中有几个字段:"+mydr.FieldCount);                Console.WriteLine("是否关闭:"+mydr.IsClosed);                mydr.Close();                Console.WriteLine("是否关闭:" + mydr.IsClosed);            }            catch(Exception ex)            {                Console.WriteLine(ex.Message.ToString());            }            finally            {                myCon.Close();            }            Console.Read();        }    }}



原创粉丝点击