在大查询之后,使用Access DB的程序在db.Close()上崩溃。没有错误消息

时间:2013-09-10 23:30:32

标签: .net database odbc ms-access-2007 ms-access-2010

我有一个奇怪的错误,似乎只是在一个大查询之后出现(即,有很多连接)而不是在单个表上的小查询上发生。

这是我的设置:

  1. VB .NET 3.5应用程序
  2. 使用以下连接语句连接到Access数据库:

    Me.connection = "Provider=Microsoft.Ace.OLEDB.12.0;" & _ "User ID=Admin;" & _ "Data Source=" & ACCESS07_CONNECTION_STRING & ";" & _ "Mode=Read|Write;Extended Properties="""";Jet OLEDB:System Database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"

  3. (全行代码在底部)

  4. 数据库是共享网络驱动器上的Access文件(我们都使用相同的文件)。
  5. 在Windows XP,7 32和64位Office 2007或2010上运行。
  6. 然而,仅在我的机器上,代码在" big"之后崩溃。查询。大,我的意思是涉及许多联合。较小的单表选择查询运行正常。

    为了让它更加混乱,崩溃发生在db.Close()行!返回结果集,不显示任何错误消息。 Visual Studio甚至无法JIT调试它......

    我目前的理论是关于我的特定访问驱动程序的事情?如果是这样,我该怎么换掉呢?我的团队中有其他人在Windows 7 64bit上使用Office 2010,所以我假设我可以与他交换驱动程序DLL(假设这甚至是问题)?

    我不愿意进行代码更改,因为这适用于除我的每台机器。


    Dim db As New ADODB.Connection
    Me.connection = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
            "User ID=Admin;" & _
            "Data Source=" & ACCESS07_CONNECTION_STRING & ";" & _
            "Mode=Read|Write;Extended Properties="""";Jet OLEDB:System Database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"
    Try
        db.Open(Me.connection)
    Catch ex As Exception
    
        receivedCOMException()
        Return Nothing
        Exit Function
    
    End Try
    
    
    
    Dim rs As New ADODB.Recordset
    rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
    rs.Open(p_sql_query, db)
    'Debug.Print(Me.sql_query)
    mpet_rs = New DBRecordSet(rs)
    rs.Close()
    db.Close()
    rs = Nothing
    db = Nothing
    

1 个答案:

答案 0 :(得分:1)

我找到了答案 - 尽管事实证明这很难过,但我重新安装了Access 2010,现在问题已经消失。我的司机有些不好。