首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

已有打开的与此下令相关联的DataReader,必须首先将它关闭

2013-06-19 
已有打开的与此命令相关联的DataReader,必须首先将它关闭。我是用VB.net做网站的,网站有时候就要报上面那个

已有打开的与此命令相关联的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变量,不要从外部共享。

热点排行