正确点关闭vb.net中的数据读取器

时间:2016-01-11 08:21:56

标签: vb.net

我在vb.net中有这个代码:

reader = myCommand.ExecuteReader
If reader.HasRows Then
    While reader.read

    End While
End If

我应该在End While之后或End If

之后使用reader.close

3 个答案:

答案 0 :(得分:2)

最好的方法是使用Using-statement来确保处理非托管资源(即使出错)。这也使读者关闭。

Using reader = myCommand.ExecuteReader()
   If reader.HasRows Then
      While reader.read

      End While
    End If 
End Using

Is it necessary to manually close and dispose of SqlDataReader?

答案 1 :(得分:0)

.Close放在哪里没有区别。更重要的是要确保你处理命令对象(你应该处理实现IDisposable的任何对象。你发布的代码不清楚你是否这样做。

最简单的方法是将其包装在使用块中

如果你看example on MSDN。这是他们使用的模式:

   Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)
        connection.Open()

        Dim reader As SqlDataReader = command.ExecuteReader()

        ' Call Read before accessing data.
        While reader.Read()

        End While

        ' Call Close when done reading.
        reader.Close()
    End Using

但由于SqlDataReader也实现了IDisposable - 所以最好还是将读者包装在using块中。

using屏蔽结束时,reader已关闭为您处理,这意味着您无需担心:

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)
        connection.Open()

        Using reader As SqlDataReader = command.ExecuteReader()
            While reader.Read()

            End While
        End Using

    End Using

请注意,您无需检查是否reader.HasRows,因为如果没有行,reader.Read将返回False。有关详细信息,请参阅此答案:Should if call SqlDataReader.HasRows if I am calling SqlReader.Read

答案 2 :(得分:0)

另一种方法是

Try
    reader = myCommand.ExecuteReader
    If reader.HasRows Then
        While reader.read

        End While
    End If
Catch ex as Exception
Finally
    reader.Close()
End Try