Исключение OleDb System.Data.OleDb.OleDbException (0x80004005): Превышен системный ресурс - PullRequest
0 голосов
/ 20 мая 2019

VB2013: получено исключение System.Data.OleDb.OleDbException (0x80004005): превышен системный ресурс.Когда я запрашиваю базу данных MS Access.

Вот что я делаю в своем коде:

'Make the connection to connDB
Public connDB As OleDbConnection
connDB = New OleDbConnection
With connDB
     .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DbFile & ";Persist Security Info=True;Jet OLEDB:Database Password=xxxxxx;"
     .Open()
 End With

 'iterate through some 2500 obects. each object has a set of codes and we will get their description here
  GetSysDefinitions (list of codes for an object)

'Close the connection to connDB;

Public Function GetSysDefinitions(sysCodes As List(Of String)) As String
    Try
        'check to see if the db is available
        If connDB Is Nothing Then Return ""

        'set up the SQL to get the System Codes and Definitions
        Dim sCodes As String = "'" & String.Join("', '", sysCodes) & "'"
        Dim sql As String = "SELECT * " & _
                            "FROM SYS_Codes " & _
                            "WHERE CODE IN(" & sCodes & ") ; "
        Dim daLs As New OleDbDataAdapter(sql, connDB)
        Dim dsLs As New DataSet
        Dim dtLs As New DataTable
        daLs.SelectCommand.CommandTimeout = 60 '60 seconds for the command to timeout
        daLs.Fill(dsLs, "Sys")  '<=== Exception here at some point
        dtLs = dsLs.Tables(0)

        'do something with records returned
    Catch ex As Exception
        Debug.Print(ex.ToString)
    End Try
End Function

Все это прекрасно работает.Однако в какой-то момент я получаю исключение System.Data.OleDb.OleDbException (0x80004005): превышен системный ресурс в строке daLs.Fill.Я просто не уверен, почему ресурсы превышаются и что мне нужно сделать, чтобы избежать этого исключения.Похоже, я устанавливаю одно соединение, а затем использую его для множества запросов.Должно ли работать правильно?

1 Ответ

0 голосов
/ 21 мая 2019

Спасибо Çöđěxěŕ и Эндрю Мортону. Не помню, где я взял фрагмент кода, но использовал его в течение многих лет. Я думаю, разница в том, что я использую эту процедуру в большом количестве звонков. Вот мой обновленный код, который я тестировал, и никаких исключений:

        Using daLs As New OleDbDataAdapter(sql, connDb)
            Using dtLs As New DataTable
                'fill in the DataTable
                daLs.Fill(dtLs)
                dtLs.TableName = "CoreSys"

                'check for how many rows were returned
                'parse out rows
            End Using
        End Using
...