数据库连接关闭错误

时间:2014-03-19 19:57:05

标签: vb.net ms-access visual-studio-2008

以下函数由几种不同的方法使用:

Public Shared Function SqlScalar(ByVal sql As String) As Object
    Dim cmd As New OleDbCommand(sql, frmMain.con)

    frmMain.con.Open()
    Dim Scalar As Object = cmd.ExecuteScalar
    frmMain.con.Close()

    Return Scalar
End Function

confrmMain中定义如下:

Public Shared con As OleDbConnection
...
con = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= G:\mypath\mydatabase.accdb")

到目前为止,我已经解开的崩溃模式非常奇怪,所以我会尽力描述它们。

当它崩溃时(在调试时),它会在frmMain.con.Close()成功分配Scalar之后执行此操作。 VS不提供标准的Exception Thrown信息,但仅提供以下内容:

Crash message

单击“Debug the progam”只关闭程序。

现在,方法SqlScalarABCD会调用E。它对方法A - D运行良好,但在E调用时崩溃。

我尝试过的事情:

  • 如果我注释掉任何方法A - D,那么E就可以了。我认为它可能与它被调用的次数有关,所以我把它放在一个刚刚调用SqlScalar的循环中。它在100多次迭代后没有崩溃。

  • 如果我之前运行E(例如C之前),一切运行正常。然而,这个问题已经在不同领域出现了一段时间,我真的很想解决这个问题。

  • 切换项目设置“启用非托管代码调试”和“启用Visual Studio托管过程”没有帮助和/或导致其他问题。

编辑:另一个奇怪的症状是,有时,如果我在脚本中的某处插入断点并让它在断开后静置几分钟,它会崩溃并显示上面显示的相同错误窗口。

编辑II:我已经在几台机器上测试了脚本(通过VS和exe),在某些机器上它崩溃了,有些则没有。如果它在VS中崩溃,那么exe也会这样做,两者都给出了上面看到的相同的错误信息。所有机器都运行Win7 64位。

1 个答案:

答案 0 :(得分:0)

这是来自Hands On Technology Transfer的Dana Wyatt。以下是我的一些想法:

1)我同意你的连接对象需要是该方法的LOCAL。当您以其他形式引用公共变量时,如果表单不存在,则该变量可能为null。

Public Shared Function SqlScalar(ByVal sql As String) As Object

    Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= G:\mypath\mydatabase.accdb")

    Dim cmd As New OleDbCommand(sql, frmMain.con)

    con.Open()
    Dim Scalar As Object = cmd.ExecuteScalar
    con.Close()

    Return Scalar
End Function

2)在VS 2010的某个地方,当连接字符串部分错误时,它会退出抛出异常。所以你可以打开一个没有工作的开放,直到方法的后期才会失败。因此,请确保您的连接字符串100%正确。最好将它放在配置文件的部分中,并始终从那里加载它。

3)最后,一台机器上的错误行为而不是另一台机器上的错误行为让我相信你在accdb数据库的一台或多台机器上有驱动程序问题。确保已下载最新的Office系统驱动程序,引擎等。

http://www.microsoft.com/en-us/download/details.aspx?id=13255

尝试所有这些。如果有效,请告知HOTT。我相信你是通过电子邮件发送Chris E.如果它不起作用,我们会尝试考虑更多的问题。

就我个人而言,我认为这不是一个问题,而是几个人的组合...有点像杂货车上的三个坏轮! :)

-Dana