我已经创建了一小类辅助方法来处理数据库。我对这种方法感到疑惑:
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对象来保持调用代码整洁(当上面的帮助方法中包含它时,这似乎是多余的。)
答案 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()
。