zoukankan      html  css  js  c++  java
  • DataReader总结

    DataReader使用流的方式读取输出数据,所以速度会比较快,因此经常会被用到,但是问题同时经常有人在使用完成以后忘记关闭DataReader或者是不知道在什么时候关闭。这里我们详细说一下DataReader的关闭。

    首先添加配置:

    XML 代码
    <appSettings>
    <add key="DefaultSqlConnectionString" value="SERVER=.;DATABASE=test;UID=sa;PWD=123456;Connection Reset=false;Min Pool Size=1;Max Pool Size=2"/>
    </appSettings>

    从配置中,我们可以知道最大允许两个连接,超过两个将会报错。

    读取数据函数:

    cmd.ExecuteReader(string strsql) ,返回 SqlDataReader 。这里我们就不给详细的写法了。

    测试一:

    C# 代码
    SqlDataReader dr = cmd.ExecuteReader("select * from Ip where id=0");
    if (dr.HasRows)
    {
    dr.Close();
    dr.Dispose();
    }

    这里主要是有的同事认为只在dr有数据时才需要关闭,经测试错,当页面刷新两次报错,连接池已满。实际上此时,无论有无数据,datareader已建立一个连接,只是数据为Empty,dr对象不是null,占用的连接在使用完成必须释放:

    正确:

    C# 代码
    SqlDataReader dr = cmd.ExecuteReader("select * from Ip where id=0");
    if (dr.HasRows)
    {
    //读取数据
    }
    dr.Close();
    dr.Dispose();

    测试二:多次连接使用同一个datareader

    C# 代码
    SqlDataReader dr = cmd.ExecuteReader("select * from Ip where id=0");
    dr = cmd.ExecuteReader("select * from Ip where id=-1");
    dr = cmd.ExecuteReader("select * from Ip where id=-2");
    dr.Close();
    dr.Dispose();

    有人认为共用一个datareader将会只建立一次链接,因此建立该测试,测试证明在运行是,报错: dr = cmd.ExecuteReader("select * from Ip where id=-2"); 说明执行到这里时连接池已满,没有空闲连接供它使用。因为前面两个查询已占用了两个连接,并没有释放。

    因此正确的做法是datareader使用完成必须单独关闭:

    C# 代码
    SqlDataReader dr = cmd.ExecuteReader("select * from Ip where id=0");
    dr.Close();
    dr.Dispose();
    dr = cmd.ExecuteReader("select * from Ip where id=-1");
    dr.Close();
    dr.Dispose();
    dr = cmd.ExecuteReader("select * from Ip where id=-2");
    dr.Close();
    dr.Dispose();

    总结:DataReader虽然速度快,但是一定要注意每次使用后必须记得关闭。


    本篇文章来源于 http://www.shenjk.com/ 原文链接:http://www.shenjk.com/details/643.html

  • 相关阅读:
    Codeforces 931A&1312A&172A
    STL常用容器(deque&stack&queue)
    Codeforces 141A&1368A
    Tensorflow安装和配置
    Spark高可用配置
    Spark安装及环境配置
    SSH免密登录
    大数据集群linux环境搭配
    Spark学习之RDD算子
    Spark学习之再谈RDD
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1500101.html
Copyright © 2011-2022 走看看