C# SqlDataReader 关闭方法
Posted
技术标签:
【中文标题】C# SqlDataReader 关闭方法【英文标题】:C# SqlDataReader close method 【发布时间】:2011-09-04 15:58:20 【问题描述】:以下哪种方法更适合关闭SqlDataReader:
SqlDataReader reader = comm.ExecuteReader();
while (reader.Read())
reader.Close();
reader.Dispose();
或
SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
或者还有其他更进一步的关闭方法?
【问题讨论】:
【参考方案1】:正确的处理方式是using
语句:
using(SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection))
while (reader.Read())
这样对象就可以正确处理(并且您无需调用Close()
)。
【讨论】:
【参考方案2】:根据我的经验,using
声明是在这种情况下的最佳实践。即使内部某处发生异常,它也可以确保正确关闭连接。
using (SqlDataReader reader = comm.ExecuteReader())
while (reader.Read())
//Do stuff...
当然,您可以对try finally
执行相同的操作,这就是using
语句在内部执行的操作。我发现养成始终通过using
语句处理读者的习惯通常是一个好主意,以避免泄漏连接的可能性。
【讨论】:
【参考方案3】:如果您在一个方法中使用 reader,则使用第一个场景,如果您将 reader 作为返回值(不在一个范围内)传递,则使用第二个场景。
【讨论】:
【参考方案4】:您需要的文档是这个:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx
引用:“当您使用 SqlDataReader 将关联的 SqlConnection 用于任何其他目的时,您必须显式调用 Close 方法。”
【讨论】:
以上是关于C# SqlDataReader 关闭方法的主要内容,如果未能解决你的问题,请参考以下文章
C# - 无法将类型“IBM.Data.DB2.iSeries.iDB2DataReader”隐式转换为“System.Data.SqlClient.SqlDataReader”
C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用