1

我创建了一小类用于处理数据库的辅助方法。我想知道这种方法:

Shared Function GetReader(sql As String, con As OleDbConnection) As OleDbDataReader

   Dim cmd As New OleDbCommand(sql, con)
   Dim reader As OleDbDataReader = cmd.ExecuteReader
   cmd.Dispose()
   Return reader

End Function

我会遇到一些麻烦,先处理 Command 对象,然后再使用 DataReader?

我宁愿通过不一直创建/处理 Command 对象来保持调用代码的整洁(当可以将其包含在上面的辅助方法中时,这似乎是多余的)。

4

2 回答 2

2

我会遇到一些麻烦,先处理 Command 对象,然后再使用 DataReader?

但这是一个更简洁的代码:

Shared Function GetReader(sql As String, con As OleDbConnection) As OleDbDataReader

   Using cmd As New OleDbCommand(sql, con)
      Dim reader As OleDbDataReader = cmd.ExecuteReader
      'cmd.Dispose() 'Not needed here, will be invoked automatically
      Return reader
   End Using

End Function

旁注:

  • 考虑使用Using Statementsalways 来确保所有资源都已释放

  • 一旦不再需要连接和阅读器,请考虑处理它们。并且不要害怕关闭然后重新打开连接,因为默认情况下连接保留在池中,您应该尽快关闭它们 - 特别是如果您的应用程序处于某种形式的负载下 -

于 2014-10-08T04:35:35.557 回答
0

他们对这个片段没有任何问题,在执行之前,cmd.Dispose()您需要将查询结果分配给阅读器,即,Dim reader As OleDbDataReader = cmd.ExecuteReader即使在处理cmd. 它将保持该值直到连接获得closedreader .Dispose()发生。

于 2014-10-08T03:28:58.300 回答