已有打开的与此连接相关联的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才能做其它的事。