【问题标题】:An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dllSystem.Data.dll 中出现“System.InvalidOperationException”类型的未处理异常
【发布时间】:2013-07-04 17:45:34
【问题描述】:

我正在 Visual Studio 2008 的“sql server 2008 management edition”中创建与我的数据库的连接。

我在我的数据库中存储了一个名为“CTable”的过程,我想执行它。(来自 Visual Studio)

这是我的代码:

    Dim strConn As String
    strConn = "Server=(local);Database=dbAjout;Integrated Security=True"

    Dim MyConn As New SqlConnection(strConn)
    MyConn.Open()
    Dim cmd As SqlCommand

    Dim query As String = "EXEC CTable"

    cmd = New SqlCommand(query, MyConn)

    MyConn.Open()
    cmd.ExecuteNonQuery()
    MyConn.Close()
End Sub

但我有这个错误:An unhandled exception of type 'System.InvalidOperationException' occurred in System.Data.dll

附加信息:连接未关闭。连接的当前状态是打开的。”

你有什么建议??? 我被屏蔽了,已经 4 小时了!!!!

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您打开连接两次。根据文档 (SqlConnection.Open()):

    例外情况
    无效操作异常
    - 如果不指定数据源或服务器,则无法打开连接。
    - 或
    - 连接已经打开。

    这(可能)是导致InvalidOperationException 被抛出的原因。

    【讨论】:

    • @user2550171 您在MyConn 上调用了两次Open 方法,导致此异常。因为你已经打开了连接。您可以删除其中任何一个来解决此问题。
    【解决方案2】:

    将您的代码更改为:

    Dim strConn As String
    strConn = "Server=(local);Database=dbAjout;Integrated Security=True"
    
    Dim MyConn As New SqlConnection(strConn)
    Dim cmd As SqlCommand
    
    Dim query As String = "EXEC CTable"
    
    cmd = New SqlCommand(query, MyConn)
    
    MyConn.Open()
    cmd.ExecuteNonQuery()
    MyConn.Close()
    

    您应该考虑使用Using 语句为您的SqlConnection 调用Dispose 模式,如下所示:

    Dim strConn As String
    strConn = "Server=(local);Database=dbAjout;Integrated Security=True"
    
    Using MyConn As New SqlConnection(strConn)
        Dim cmd As SqlCommand
        Dim query As String = "EXEC CTable"
    
        cmd = New SqlCommand(query, MyConn)
    
        MyConn.Open()
        cmd.ExecuteNonQuery()
    End Using
    

    注意:Using 语句可以应用于任何实现IDisposable 接口的对象。在这种情况下,它将通过为您调用Close 方法自动关闭SqlConnection 对象。在幕后,VB.NET 编译器将看到Using 语句并将Using 块包装在Try 块中并给它一个Finally 块,这是SqlConnectionClose 块方法将代表您调用。在我看来,这种语法使代码更易于阅读,更易于维护,因为您可以看到连接对象中包含的所有内容,并且无需“记住”关闭底层数据库连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多