“连接未关闭时该怎么办?连接的当前状态是打开的。出现在“dcnOil.Close”? [英] what do I do when "The connection was not closed. The connection's current state is open." show up at the "dcnOil.Close"?
本文介绍了“连接未关闭时该怎么办?连接的当前状态是打开的。出现在“dcnOil.Close”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
公开 类 clsOilDA
私有 共享 dcnOil 作为 新 _
OleDbConnection( Provider = Microsoft.Jet.OLEDB.4.0;数据Source = C:\ temp \Oil.mdb)
私有 共享油作为 新 ArrayList()
私有 共享 anOil 作为 clsOil
< span class =code-keyword>私有 共享 aCountry,aCompany 作为 字符串
私人 共享 aFax,anOrder 作为 整数
私人 共享 aPrice 作为 十进制
公共 共享 Sub Initialize()
dcnOil.Close()
结束 Sub
公开 共享 Sub 终止()
dcnOil.Close()
dcnOil.Dispose()
结束 Sub
Public 共享 函数 GetAll()作为 ArrayList
Dim dapOil < span class =code-keyword> As New OleDbDataAdapter()
Dim dtbOil 作为 新 DataTable()
Dim drwOil As DataRow
dapOil = 新 OleDbDataAdapter( 选择*来自油,dcnOil)
dapOil.Fill(dtbOil)
oil.Clear()
对于 每个 drwOil 在 dtbOil.Rows
aCountry = drwOil( Country )
aCompany = drwOil( 公司)
aFax = drwOil( 传真)
anOrder = drwOil( < span class =code-string> Order)
aPrice =( Price )
下一步
返回石油
结束 功能
公共 共享 Sub 添加( ByVal aOil < span class =code-keyword> As clsOil)
Dim dapOil As 新 OleDbDataAdapter()
Dim sqlQuery 作为 字符串 = INSERT INTO Oil& VALUES('& aOil.Country& ','& aOil.Company& ','& aOil.Fax& ','& aOil.Order& ','& aOil.Price& ')
dapOil.UpdateCommand = 新 OleDbCommand(sqlQuery,dcnOil)
dapOil.UpdateCommand.ExecuteNonQuery()
结束 Sub
公开 共享 Sub 删除( ByVal aOil As clsOil)
Dim dapOil As 新 OleDbDataAdapter()
Dim sqlQuery As 字符串 = DELETE FROM Oil WHERE Country = '& aOil.Country& '
dapOil.UpdateCommand = 新 OleDbCommand(sqlQuery,dcnOil)
dapOil.UpdateCommand.ExecuteNonQuery()
结束 Sub
结束 类
解决方案
在尝试关闭之前检查它是否实际打开。
另外 - 你似乎没有在这个类的任何地方打开连接。
尝试类似
公共 共享 Sub Initialize()
如果 dcnOil.State = ConnectionState.Open 然后
dcnOil.Close()
结束 如果
dcnOil.Open()
结束 Sub
公共 共享 Sub Terminate()
如果 dcnOil.State = ConnectionState.Open 那么
dcnOil.Close()
结束 如果
dcnOil.Dispose()
结束 子跨度>
Public Class clsOilDA
Private Shared dcnOil As New _
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\Oil.mdb")
Private Shared oil As New ArrayList()
Private Shared anOil As clsOil
Private Shared aCountry, aCompany As String
Private Shared aFax, anOrder As Integer
Private Shared aPrice As Decimal
Public Shared Sub Initialize()
dcnOil.Close()
End Sub
Public Shared Sub Terminate()
dcnOil.Close()
dcnOil.Dispose()
End Sub
Public Shared Function GetAll() As ArrayList
Dim dapOil As New OleDbDataAdapter()
Dim dtbOil As New DataTable()
Dim drwOil As DataRow
dapOil = New OleDbDataAdapter("Select * from Oil", dcnOil)
dapOil.Fill(dtbOil)
oil.Clear()
For Each drwOil In dtbOil.Rows
aCountry = drwOil("Country")
aCompany = drwOil("Company")
aFax = drwOil("Fax")
anOrder = drwOil("Order")
aPrice = ("Price")
Next
Return oil
End Function
Public Shared Sub Add(ByVal aOil As clsOil)
Dim dapOil As New OleDbDataAdapter()
Dim sqlQuery As String = "INSERT INTO Oil " & "VALUES ('" & aOil.Country & "', '" & aOil.Company & "', '" & aOil.Fax & "', '" & aOil.Order & "', '" & aOil.Price & "') "
dapOil.UpdateCommand = New OleDbCommand(sqlQuery, dcnOil)
dapOil.UpdateCommand.ExecuteNonQuery()
End Sub
Public Shared Sub Delete(ByVal aOil As clsOil)
Dim dapOil As New OleDbDataAdapter()
Dim sqlQuery As String = "DELETE FROM Oil WHERE Country = '" & aOil.Country & "'"
dapOil.UpdateCommand = New OleDbCommand(sqlQuery, dcnOil)
dapOil.UpdateCommand.ExecuteNonQuery()
End Sub
End Class
解决方案
Check to see if it is actually open before attempting to close it.
Also - you don't appear to be opening the connection anywhere in this class.
Try something like
Public Shared Sub Initialize() If dcnOil.State = ConnectionState.Open Then dcnOil.Close() End If dcnOil.Open() End Sub Public Shared Sub Terminate() If dcnOil.State = ConnectionState.Open Then dcnOil.Close() End If dcnOil.Dispose() End Sub
这篇关于“连接未关闭时该怎么办?连接的当前状态是打开的。出现在“dcnOil.Close”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文