例如我有这段代码:
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 会发生什么
datareader 使用的 Cursor 会被释放吗?还是会保持开放?
如果数据读取器使用的游标仍然打开,它什么时候会自动关闭?还是我应该手动关闭它?
它会导致可怕的“ORA-01000: maximum open cursors exceeded”吗?
提前致谢
最佳答案
您应该在 using block 中创建对象,以便正确处理它们:
Using Conn As New Data.SqlClient.SqlConnection
Conn.Open()
Dim Cmd As New Data.SqlClient.SqlCommand
With Cmd
.Connection = Conn
.CommandType = Data.CommandType.Text
.CommandText = "SELECT * FROM MONTH"
End With
Using datareader As Data.SqlClient.SqlDataReader = Cmd.ExecuteReader()
While datareader.Read()
Response.Write(datareader(0))
End While
End Using
End Using
无需在连接或数据读取器上调用 Close。
关于.net - Connection关闭时DataReader没有关闭,后果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182884/