Vb.net 连接状态为关闭连接打开时出错

Vb.net 连接状态为关闭连接打开时出错,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我收到以下错误:ExecuteOnQuery需要一个打开且可用的连接。连接的当前状态为关闭 然而,在我的代码中,连接状态是在抛出此异常之前打开的。我不明白为什么它说它会关闭 代码: 覆盖实例“conn” 在代码开头声明“conn” 在打开连接之前,请再次执行此操作。。 删除第二个分配。您已经创建了两次连接。当您构建SqlCommand时,您将该命令与之前创建的连接相关联,但随后再次重新创建该连接,并且与该命令关联的新对象不再相同- 添加参数后,删除此行 conn = New SqlConne

我收到以下错误:ExecuteOnQuery需要一个打开且可用的连接。连接的当前状态为关闭

然而,在我的代码中,连接状态是在抛出此异常之前打开的。我不明白为什么它说它会关闭

代码:


覆盖实例“conn”

在代码开头声明“conn”

在打开连接之前,请再次执行此操作。。
删除第二个分配。

您已经创建了两次连接。当您构建SqlCommand时,您将该命令与之前创建的连接相关联,但随后再次重新创建该连接,并且与该命令关联的新对象不再相同-

添加参数后,删除此行

  conn = New SqlConnection(connectionString)
但是,您应该始终封闭一次性对象,如使用块的连接

Try

  Using conn = New SqlConnection(connectionString)
     .....
     create the command
     create the parameters
     ....
     cmd.ExecuteNonQuery() 

  End Using  ' Here the connection will be closed and disposed
Catch ex As Exception

End Try 
作为旁注,如果


如果我objId.Count-1,那么

我把第二个放进去,因为我正在尝试,它仍然会出现例外,只有一个在那里。你能通过投资“conn.state”propertyvalue告诉我调用“conn.Open()”后的状态吗?顺便说一句:我更喜欢使用“use”语句,比如@Steve wrotestate=conn.state,其中state是字符串,状态等于1。指示连接已打开是否确实要进入“If i=objId.Count-1 Then”-因为连接对象可能不同-尝试使用cmd.connection.Open()-访问cmd的连接实例我将编辑代码以反映只有一个连接,它仍然会出现异常,只有其中一个异常。我在整个程序中使用了conn=New-SqlConnection(connectionString)几次,这可能是我看到该异常的原因吗?是的,如果conn是全局对象,则永远不应该将连接作为全局对象保留。如果i objId.Count-1,那么就没有什么可以得到的了,我有一个名为objId的arraylist,它有一堆来自数据库的成员id,i是我在for each语句(这就是代码的来源)末尾递增的东西,但是在修复之后,这个答案就没有意义了。您是否仍在经历相同的错误或发生了更改?
  conn = New SqlConnection(connectionString)
Try

  Using conn = New SqlConnection(connectionString)
     .....
     create the command
     create the parameters
     ....
     cmd.ExecuteNonQuery() 

  End Using  ' Here the connection will be closed and disposed
Catch ex As Exception

End Try