2013-07-04 73 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

相關問題