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

已有打开的与此连接相关联的DataReader,必须首先将它关闭,该怎么处理

2012-01-19 
已有打开的与此连接相关联的DataReader,必须首先将它关闭 dbAccessclass中定義PublicFunctionGetDTableByS

已有打开的与此连接相关联的DataReader,必须首先将它关闭
' 'dbAccess   class   中定義  
Public   Function   GetDTableBySql(ByVal   strSQL   As   String,   Optional   ByVal   sqlParam()   As   SqlParameter   =   Nothing)   As   Boolean
          Try
                    Dim   sqlCmd   As   SqlClient.SqlCommand   =   New   SqlClient.SqlCommand

                    With   sqlCmd
                              If   BoolTranc   =   True   Then   .Transaction   =   Tranc
                                .Connection   =   Connection
                                .CommandText   =   strSQL
                                  '添加一些参数
                                      If   Not   sqlParam   Is   Nothing   Then
                                                .Parameters.AddRange(sqlParam)
                                        End   If
                    End   With
                  Dim   sqlAdp   As   SqlClient.SqlDataAdapter   =   New   SqlClient.SqlDataAdapter(sqlCmd)
                                Dim   dt   As   DataTable   =   New   DataTable
                                sqlAdp.Fill(dt)
                                sqlAdp   =   Nothing
                                sqlCmd   =   Nothing
                                Me.ResultTable   =   dt
                                Return   True
Catch   ex   As   Exception
     
              ErrorMessage   =   ex.Message
              Return   False
End   Try

                End   Function
------------------------------------
' '進行調用
        dbAccess.OpenConnection()
            '查询sql
            resultDBAccess   =   dbAccess.GetDTableBySql(sqlQuery.ToString)
                If   resultDBAccess   =   True   Then


                              param.SelectDataTable   =   dbAccess.ResultTable
                End   If

        dbAccess.CloseConnection()

説明:
這樣的調用有很多地方,一個客戶端的時候沒發現錯誤。當   多個客戶端時有時候會出現標題的錯誤。


[解决办法]
DataReader要显式打开显式关闭,Connection也是如此。
问题就是答案了。
[解决办法]
1。多次使用同一Connection
2。如果显式关闭了,并发时也不会有问题。
[解决办法]
只有datareader要显式关闭,datatable,dataset会自动回收,只要处理好,不会有冲突。
[解决办法]
SqlDataAdapter,SqlCommand也是自动回收的,只有当connection打开一个datareader后才要显示关闭,然后该connection才能做其它的事。

热点排行