当前位置:Gxlcms >
数据库问题 >
C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
时间:2021-07-01 10:21:17
帮助过:3人阅读
<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.
C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
标签: