已有打开的与此命令相关联的DataReader,必须首先将它关闭。
我是用VB.net做网站的,网站有时候就要报上面那个错误,刷新一次就没问题了。
Public Function Find(ByVal Sql As String) As DataTable
Dim _Table As New DataTable
Dim _Ad As New Data.OleDb.OleDbDataAdapter
If _Conn.State = ConnectionState.Closed Then _Conn.Open()
_Cmd.Connection = _Conn
_Cmd.CommandText = Sql
_Ad.SelectCommand = _Cmd
_Ad.Fill(_Table)
Find = _Table
_Conn.Close()
_Ad = Nothing
End Function
这个是我数据库查询。
我的数据库连接:
Public Function DbConn(ByVal Sql As String) As SqlClient.SqlConnection
Dim strConn As String = "。。。"
Try
DbConn = New Data.SqlClient.SqlConnection(strConn)
If IsDBNull(DbConn) Then
DbConn = New Data.SqlClient.SqlConnection(strConn)
DbConn.Open()
ElseIf DbConn.State = System.Data.ConnectionState.Closed Then
DbConn.Open()
ElseIf DbConn.State = System.Data.ConnectionState.Broken Then
DbConn.Close()
DbConn.Open()
End If
Return DbConn
Catch ex As Exception
Throw New Exception("创建MsSQl数据库的链接失败!")
Return Nothing
End Try
End Function
我在外面调用的时候:Dim dt As Data.DataTable = db.FindSQL("select * from " & tablename & " where " & where)
直接到Find函数的时候就报上面错误。应该怎么改呢?我看C#里面有using直接释放?VB.NET里面不知道怎么弄了?
[解决办法]
在FIN函数最前面 加上判断 如果有 DataReader 就关闭..这样试试
不过如果DataReader后面还有用果断话,就断点一步一步分析,分配好代码的执行顺序吧
[解决办法]
把_Conn声明为函数内部Dim变量,不要从外部共享。