2013-07-04 149 views
2

我创造我的数据库“SQL Server 2008中的管理版本”从Visual Studio 2008“System.InvalidOperationException”类型的未处理的异常出现在system.data.dll

我存储在一个名为程序的连接“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

附加信息:连接未关闭。连接的当前状态为开“

你有什么建议??? IM阻挡,它一直4小时!!!!

回答

2

你打开你的连接两次按文档(SqlConnection.Open()):

Exceptions
InvalidOperationException
- Cannot open a connection without specifying a data source or server.
- or
- The connection is already open.

即(可能)是什么原因导致InvalidOperationException抛出

+0

我的服务器在连接字符串是我的数据源! – user2550171

+0

@ user2550171您在'MyConn'上两次调用'Open'方法,这会导致此异常。因为你已经打开了连接。您可以删除其中一个来解决这个问题。 – Styxxy

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

你应该考虑利用Using语句,像这样的调用Dispose模式为您SqlConnection

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块,这将代表您调用SqlConnection的方法。这个语法使得我的代码更容易阅读代码,更容易维护,因为您可以看到连接对象中包含的所有内容,并且无需“记住”关闭底层数据库连接。

+0

谢谢卡尔! – user2550171

相关问题