.net - Connection关闭时DataReader没有关闭,后果?

标签 .net database vb.net oracleclient

例如我有这段代码:

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/

相关文章:

c# - 如何使 String.Contains 不区分大小写?

C# 相当于 VB.NET 'Handles button1.Click, button2.Click'

c# - 为什么在 WCF 应用程序的 Web.config 文件中添加 httpRuntime targetFramework 可以解决与 TLS 相关的连接问题?

c# - 使用 linq 按票证未关闭的最低日期订购票证?

c# - 命名空间 'Management' 中不存在类型或命名空间名称 'MicrosoftSqlServer' 您是否缺少程序集引用

python - 使用 python 和 flask 的多个 SQL 查询

database - 如何使用存储过程从任何表中删除总文本?

c# - 更改 Xamarin.Forms 中背景图像的纵横比,同时保持内容居中

database - 在 SQL 中以精美打印的格式选择数组

vb.net - .NET 将日期时间和 UTC 转换为本地时间的奇怪行为