我正在从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小时!!!!
答案 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;关闭底层数据库连接。