cmd.ExecuteReader(CommandBehavior.CloseConnection)的作用

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();
        //这样写是有问题的,con关闭数据库连接,返回的SqlDataReader将毫无用处,因为SqlDataReader依赖的con已经关闭
    }
} 

1. CommandBehavior.CloseConnection参数一般在 ExecuteReader() 中使用,作用是使返回对象前不关闭数据库连接。CloseConnection解决了流读取数据模式下,数据库连接不能有效关闭的情况。当DataReader对象在生成时使用了CommandBehavior.CloseConnection参数,那数据库连接将在DataReader对象关闭时自动关闭。

2. 若在finally中调用con.close()会使得 数据库连接关闭,SqlDataReader依赖的连接关闭,返回的SqlDataReader将毫无作用。若不调用con.close(),那么返回后该连接将无法关闭,因为外部无法再调用到这个对象。

3. 为了实现既不关闭连接,也不能保持连接始终打开,很多系统只能放弃使用Reader模式的数据源,或将con对象交给调用者,使其能在外部关闭。

4. CommandBehavior.CloseConnection 能保证在关闭SqlDataReader对象时,自动释放其依赖的连接。实现了既不关闭连接,也不能保持连接始终打开

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值