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参数的作用

关于SqlDataReader使用的一点疑惑

c# - 从 SqlDataReader 填充通用列表

如何在 C# 中使用 SqlDataReader 获取行数

C#利用SqlDataReader读取SQL Server数据表