System.Data.dll中发生了未处理的“System.InvalidOperationException”类型异常

时间:2013-07-04 17:45:34

标签: vb.net

我正在从visual studio 2008创建“sql server 2008管理版”中的数据库连接。

我在我的数据库中存储了一个名为“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小时!!!!

2 个答案:

答案 0 :(得分:2)

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

  

<强>例外
  出现InvalidOperationException
    - 未指定数据源或服务器时无法打开连接     - 或
    - 连接已打开。

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

答案 1 :(得分:1)

将您的代码更改为:

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()

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

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接口的任何对象。在这种情况下,它会通过为您调用SqlConnection方法自动关闭Close对象。在幕后,VB.NET编译器将看到Using语句并将Using块包装在Try块中并给它一个Finally块,这是我会代表您调用SqlConnection Close方法。在我看来,这种语法使代码更易于阅读,更易于维护,因为您可以看到连接对象中包含的所有内容,并且无需记住&#39;关闭底层数据库连接。