SqlDataReader对象

 SqlDataReader 提供一种从SQLServer数据库中读取数据只能前进的数据流的方式。

目录

特点:

缺点:

读取方式:

注意:

创建方式:

常用属性:

常用方法:

示例:


特点:

        快速的、轻量级的、只读的,遍历访问每一行数据的数据流,向一个方向,一行一行的,不能向后读取,不能修改数据

缺点:

        不灵活,只适合数据小的情况,读取数据,一直占用连接

读取方式:

        Read()        获取第一行的数据,再次调用Read()方法;当调用Read()方法返回【false】时,就表示不再有数据行

注意:

        使用该对象,读取数据时,需要连接对象一直保持Open状态,如果连接关闭,是不能读取数据的。使用完成过后,应该马上使用close()关闭,不然Reader对象会一直占用连接。

创建方式:

        不能直接构造,需要cmd.ExecuteReader()来创建。cmd.ExecuteReader(CommandBehaviour.CloserCoonection)—以此方式创建,会在关闭reader对象时,会自动关闭连接。

读取时,尽量使用于数据库字段类型相匹配的方式来获取对应的值,避免重复的装箱拆箱操作,造成性能的损耗。

没有读取到末尾就要关闭reader对象时,先调用cmd.Canel(),然后在带哦用reader.Close()

cmd.ExecuteReader()获取存储过程的返回值或输出参数,先调用reader.Close(),然后才能获取参数的值。

常用属性:

        Connection:获取与Reader对象相关的SqlConnection

        FiedCount:当前行中的列数

        HasRows:reader是否包含一行还是多行

        IsClosed:reader对象是否已关闭 true/false

        Item[int]:列序号,给定列序号的情况,获取指定列的值  dr[1]  object

        Item[String]:列名,获取指定列的值

常用方法:

        Close() 关闭dr

        GetInt32(序列号)            根据数据类型相匹配  获取列值的方法

        GetFieldType(i)                获取数据类型的type

        GetName()                        获取指定列的列名

        GetOrdinal()                        获取指定列名的列序号

        Read()                                使dr前进到下一条记录

        NextResult()                        使dr前进到下一个记录

示例:

        dr["列名]  或  dr[列序号]

        static void TestExecuteReader2()
        {
            string str = ConfigurationManager.ConnectionStrings
                ["connStr"].ConnectionString;
            SqlConnection connection = new SqlConnection(str);
            string sql = "select * from tesTable";
            SqlCommand command = new SqlCommand();
            command.CommandText = sql;
            command.Connection = connection;
            connection.Open();
            SqlDataReader dr = command.ExecuteReader();

            int index = dr.GetOrdinal("uName");     //获取指定列的列序号
            Console.WriteLine("uName 列的列序号为: "+index);
            string name = dr.GetName(0);    //获取指定列的列名
            Console.WriteLine("列序号为  0 的列名为: " + name);
            int ageIndex = dr.GetOrdinal("age");



            Console.WriteLine("\n记录内容显示 :");
            while (dr.Read())
            {
                string uNameValue = dr.GetString(0);        //使用列的列序号获取数据
                string pwdValue = dr["uPwd"].ToString();    //使用列名获取数据
                int ageValue = dr.GetInt16(ageIndex);   //避免装箱拆箱

                Console.WriteLine(uNameValue + "\t" + pwdValue + "\t" + ageValue);
            }
            connection.Close();
           
        }

运行结果: 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

默九思

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值