1

好的,如果我将 dbDataReader 放在“Using”语句中,我是否仍需要显式调用 dbDataReader.Close。在 .net 文档中,它说“使用”连接会自动关闭它。在下面来自 MSDN 的示例中,它显示了一个没有“Using”并显式关闭它的 dbDataReader:

Public Sub ReadData(ByVal connectionString As String)
    Dim queryString As String = _
       "SELECT OrderID, CustomerID FROM Orders" 

    Using connection As New OdbcConnection(connectionString)
       Dim command As New OdbcCommand(queryString, connection)
       connection.Open()

       Dim reader As OdbcDataReader
       reader = command.ExecuteReader()

       ' Always call Read before accessing data. 
       While reader.Read()
          Console.WriteLine(reader.GetInt32(0) & ", " & reader.GetString(1))
       End While 

       ' Always call Close when done reading.
       reader.Close()
    End Using 
End Sub

所以这不是更清洁,更高效:

Public Sub ReadData(ByVal connectionString As String)
    Dim queryString As String = _
    "SELECT OrderID, CustomerID FROM Orders"

    Using connection As New OdbcConnection(connectionString)
        Using command As New OdbcCommand(queryString, connection)
            connection.Open()

            Using reader = command.ExecuteReader()

                ' Always call Read before accessing data. 
                While reader.Read()
                    Console.WriteLine(reader.GetInt32(0) & ", " & reader.GetString(1))
                End While

            End Using
        End Using
    End Using
End Sub

然后你就不需要在阅读器上显式调用 .Close 了吗?

提前致谢

4

3 回答 3

0

在您使用的代码片段中,您不需要在阅读器上显式调用 .Close。不过,养成这个习惯是个好习惯。使用完毕后立即明确关闭阅读器和连接。

于 2014-05-30T16:38:18.140 回答
-1

Close是 100% 冗余的Disposeusing以安全的方式调用Dispose。总是把你的资源放在一个using块中。它是为此目的而制造的。施工是安全的。很容易检查并立即看到它是正确的。

无需调用Close。这是多余的和令人困惑的。using如果可以的话,请始终遵循这个习惯。

C# 和 VB.NET 中的资源处理非常容易。只需使用using

如果您需要错误处理,只需try-catchusing.

于 2014-05-31T15:39:11.217 回答
-1

对我来说,最佳实践既不是
A try, catch, finally 来处理任何 SQL 异常

SqlConnection sqlConnRW = new SqlConnection(sqlConnStringLibDef);
try
{
    sqlConnRW.Open();
    SqlCommand sqlCmd = sqlConnRW.CreateCommand();
    sqlCmd.CommandText = "select column from table";
    SqlDataReader rdr = sqlCmd.ExecuteReader();
    while (rdr.Read())
    { }
    rdr.Close();
}
catch (SqlException Ex)
{
    Debug.WriteLine(Ex.Message);
    Debug.WriteLine(Ex.Number);
}
finally
{
    sqlConnRW.Close();
}
于 2014-05-31T14:04:10.817 回答