处理Command对象后使用DataReader是否可以?

时间:2014-10-08 02:42:39

标签: .net vb.net datareader oledbdatareader

我已经创建了一小类辅助方法来处理数据库。我对这种方法感到疑惑:

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对象来保持调用代码整洁(当上面的帮助方法中包含它时,这似乎是多余的。)

2 个答案:

答案 0 :(得分:2)

  

我是否会在处理命令时遇到某种麻烦   先对象,然后使用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 Statements确保所有资源都已发布

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

答案 1 :(得分:0)

这段代码没有任何问题,在执行cmd.Dispose()之前,您可以将查询结果分配给读者,即Dim reader As OleDbDataReader = cmd.ExecuteReader,以便即使在处置cmd后也能获得结果。并且它将保持该值,直到连接获得closed或其他reader .Dispose()