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

  • 相关阅读:
    webpack进阶(二)
    webpack的loader和plugin的区别
    接口和面向接口编程
    设计原则与编程技巧汇总
    W3C的盒子模型和IE的盒子模型
    React的组件
    React的路由react-router
    三种编程命名规则:驼峰命名法,帕斯卡命名法,匈牙利命名法
    gulp 构建 demo
    antd 表单的两种校验方式
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1500101.html
Copyright © 2011-2022 走看看