• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

主要用在ExecuteReader(c)中,如果想要返回对象前不关闭数据库连接,须要用CommandBehavior.CloseConnection; CloseConnection解决了流读取数据模式下,数据库连接不能有效关闭的情况。当某个XXXDataReader对象在生成时使用了CommandBehavior.CloseConnection,那数据库连接将在XXXDataReader对象关闭时自动关闭。

由于流模式读取数据库的特点,在具体应用时很难确定数据库连接何时才能被关闭,因为读取的动作是连续进行的,下面是一个常见的数据访问层的静态方法:

/// <summary> 
/// 常见的获取SqlDataReader方法
/// 通常的数据访问层都会提供这个方法
/// </summary>
static SqlDataReader GetReader()
{
    //通过连接字符串获取连接
    SqlConnection con = new SqlConnection(conn_String);
    try
    {
        //打开连接,执行查询,并且返回SqlDataReader
        con.Open();
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandText = Sql;
        SqlDataReader dr = cmd.ExecuteReader();
        //SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        return dr;
    }
    finally
    {
        //这里的代码处于两难的境地,如果这里执行关闭:con.Close();那返回的SqlDataReader将毫无用处,因为其依赖的连接已经关闭
        //如果这里不执行con.Close();那返回后该连接将永远无法关闭,因为调用方无法得到连接对象con,无法在调用处执行关闭
    }
}  

正如代码注释里描述的那样,这样的方法既不能关闭连接,也不能保持连接打开状态。很多系统为了解决这样两难的境地,只能放弃使用Reader模式的数据源,或者把连接对象交给方法调用者,以便进行关闭。
而CommandBehavior.CloseConnection的功能恰好就是为了避免类似的尴尬境地,它能够保证当SqlDataReader对象被关闭时,其依赖的连接也会被自动关闭CommandBehavior.


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#基础解析之Ⅶ【多态】发布时间:2022-07-10
下一篇:
VSTO:使用C#开发Excel、Word【1】发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap