【问题标题】:properly closing adodb connections in vb.net在 vb.net 中正确关闭 adodb 连接
【发布时间】:2011-04-19 21:51:51
【问题描述】:

在 vb.net 中,有一些应用程序使用 adodb 来访问 mysql 服务器。

private adoconnect as new adodb.connection
public adors as new adodb.recordset

public function returnadors(byval column as string) as string
 return adors.fields(column).value.tostring
end function


Public Function ReadData(ByVal strQuery As String, Optional ByVal strWhere As String = vbNullString) As Boolean

        Try

            If ADOConnect.State = ConnectionState.Open Then Call CloseConnection()
            ADOConnect.Open(dsn, user, pass)
            ADORS.Open(strQuery, ADOConnect, ADODB.CursorTypeEnum.adOpenDynamic)
            If not ADORS.EOF  Then Return True

        Catch ex As Exception

            msgbox(ex)

        End Try

        Return False

End Function

public sub closeconnection()
   if adoconnect.state = connectionstate.open then adoconnect.close
end sub

现在假设我们想用数据库中的某些内容填充一个文本框:

if readdata("SELECT NAME FROM USERS WHERE ID = 1") then
    me.textbox1.text = returnadors("NAME")
end if
call closeconnection

重新编写这些函数是一项艰巨的任务 - 除非绝对需要,否则我对此不感兴趣。

这是我的问题。

即使连接已关闭(并且我已单步执行代码,它也会关闭) 连接在休眠状态的sql server上依然可见

为什么?以及如何确保连接已关闭。

谢谢

【问题讨论】:

  • 这听起来太简单了,但是如果您在关闭连接之前更改代码以关闭 adors 怎么办?
  • 你的意思是关闭readdata()函数中的adoconnect吗?
  • 不,我的意思是 adors.Close 在 closeconnection 函数中?编辑 - 另外,之后将其设置为空。
  • 添加了它,但是仍然在服务器上以睡眠状态打开连接
  • 对试错方法表示歉意,但下面的@Akram 是在正确的道路上,问题是(很可能)连接池。见herehere

标签: vb.net ado.net adodb mysql-management


【解决方案1】:

将以下内容添加到您的ConnectionString

Pooling=False;

【讨论】:

  • Private cn As String = "DSN=dsn;uid=user;pwd=pw!;Pooling=false" 这仍然在服务器上保持连接状态为睡眠
  • Const cn As String = "DSN=dsn;uid=user;pwd=pw;OLE DB Services=-4"
【解决方案2】:

我对您正在做什么没有太多经验,但这通常是我使用 sqlserver 连接所采用的路径。 Using 会自动关闭你的连接。

Using ADOconnect
   'operations
End Using

【讨论】:

  • 是的,但我能想到的一个问题是,一旦 readdata 功能完成,并且达到使用结束,连接就会关闭。因此可以说,如果在 form1 中的某个地方使用了 returnadors 函数,则连接已关闭并且不会返回任何数据,只是一个错误
  • 很确定它会重新打开它。
  • 让我试试看看会发生什么,我会告诉你的
  • 我收到错误“使用”adodb.connection 类型的操作数必须实现“system.idisposable”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多