Количество подключений к БД Access - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Добрый день! Замучала одна проблема. Есть папка с разными файлами БД Access (~300шт.) Один файл - одна БД. Требуется периодически, раз в 10 секунд, к ним цепляться и добавлять в них строки. Логи, в общем, ведутся в них, если не вдаваться в детали. Если попытаться открыть 300 БД, то exe-шник падает с неопознанной ошибкой. Если по одному открывать-закрывать БД, то всё норм, но ощутимо медленно работает, сильно не укладываясь в положенные 10 секунд. Провел эксперимент:
На Microsoft.Jet.OLEDB.4.0 и на Microsoft.ACE.OLEDB.12.0 эффект одинаковый. Магическое число 64 - всё норм. 65 - и уже падает с неопознанной ошибкой. Проблему можно решить, разделив программку на отдельные exe с ~50 параметрами, но это ж изврат... Можно, само собой, перейти на другую БД, как посоветуют многие (и будут правы 100%), но это небыстро и долго, да и исторически так уж сложилось. Можно было бы объединить все файлы в одну БД - но это тоже не предлагать, ибо 2ГБ ограничение на размер БД Access набегает тогда очень быстро - вот поэтому они все отдельные (+ раз в год логи чистятся и начинают писаться заново) Может быть, дело в моём VS2008? И на 2010 всё будет норм? Зананее спасибо за советы!

Решение задачи: «Количество подключений к БД Access»

textual
Листинг программы
    Sub Main()
        Try
            Dim DB As OleDbConnection
            Dim CMD As OleDb.OleDbCommand
            DB = New OleDbConnection
            DB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\test\1.mdb"
            'DB.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\test\1.mdb"
            DB.Open()
            Dim DT As String = "DataTable", DTN As String = "DataTable"
            For i = 0 To 300
                If i > 0 Then DTN = DT & i
                Dim Query As String = Nothing
                'тут формирование строки запроса
                Query = "INSERT INTO " & DTN & " ([MTime], [MDate], [MLog]) VALUES ('10:00', '18 Apr 2018', 'logs: qwerty')"
                'запись в таблицу DataTable + i
                CMD = New OleDb.OleDbCommand(Query, DB)
                CMD.ExecuteNonQuery()
            Next
            DB.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
            Stop
        End Try
    End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.4 из 5
Похожие ответы