Connection关闭时DataReader没有关闭,后果如何?
例如我有这样的代码:
Sub Month()
Dim Conn As New Data.OracleClient.OracleConnection
Conn.Open()
Try
Dim Cmd As New Data.OracleClient.OracleCommand
With Cmd
.Connection = Conn
.CommandType = Data.CommandType.Text
.CommandText = "SELECT * FROM MONTH"
End With
Dim datareader As Data.OracleClient.OracleDataReader = Cmd.ExecuteReader
While datareader.Read
Response.Write(datareader(0))
End While
Catch ex As Exception
Throw ex
Finally
Conn.Close()
End Try
End Sub
当连接关闭(Conn.close)时数据读取器会发生什么
数据读取器使用的游标会被释放吗?或者它会保持开放吗?
如果datareader使用的游标仍然打开,什么时候它会自动关闭?或者我应该手动关闭它?
它会导致可怕的“ORA-01000:超出最大打开游标数”吗?
提前致谢
for example i have this code :
Sub Month()
Dim Conn As New Data.OracleClient.OracleConnection
Conn.Open()
Try
Dim Cmd As New Data.OracleClient.OracleCommand
With Cmd
.Connection = Conn
.CommandType = Data.CommandType.Text
.CommandText = "SELECT * FROM MONTH"
End With
Dim datareader As Data.OracleClient.OracleDataReader = Cmd.ExecuteReader
While datareader.Read
Response.Write(datareader(0))
End While
Catch ex As Exception
Throw ex
Finally
Conn.Close()
End Try
End Sub
What will happen to the datareader when the Connection is closed ( Conn.close)
Will the Cursor that is used by the datareader be freed ? or will it stay open ?
If the cursor that is used by the datareader is still open , when will it be automatically closed ? or should i just closed it manually ?
Will it cause the dreaded "ORA-01000: maximum open cursors exceeded" ?
thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您应该在 using 块中创建对象,以便正确处置它们:
无需在连接或数据读取器上调用 Close。
You should create the objects in a using block so they are properly disposed:
There is no need to call Close on either the connection or the datareader.
当您将以上值作为参数传递给 ExecuteReader 时
1.不需要显式关闭连接,当您关闭阅读器时,连接会关闭,
检查全文:http://pranayamr.blogspot.com/2010/11/executereader-with-commanbehavior.html
When you pass above values as argument to ExecuteReader
1. there is no need to close connection explicitly connection get close when you close your reader
check full post : http://pranayamr.blogspot.com/2010/11/executereader-with-commanbehavior.html
只需在关闭后创建数据读取器的新对象
Just make new object of data reader after it been closed
为什么你不应该像这样明确地关闭阅读器。
Why shouldn't you explicitly close the reader like this.