有了dbDataReader和"Using"你还需要调用Close吗?



好的,如果我把一个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

那么你就不需要显式地调用Reader上的。close了?

Thanks in advance

在您正在使用的代码片段中,您不需要显式地对阅读器调用. close。然而,这是一个值得养成的好习惯。使用完阅读器和连接后,立即显式关闭它们。

对于我来说,最佳实践是两者都不是
一个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();
}

CloseDispose的100%冗余。using安全呼叫Dispose。总是把你的资源放在using块中。它就是为此目的而制造的。它的施工是安全的。这很容易检查,并立即看到它是正确的。

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

c#和VB中的资源处理。NET非常简单。

请使用using !

如果您需要错误处理,只需在using的内部或外部添加一个try-catch

相关内容

  • 没有找到相关文章

最新更新