Копирование данных из файла доступа .mdb в базу данных SQL - PullRequest
0 голосов
/ 10 марта 2011

У нас есть клиент, который запускает проприетарное приложение, из которого они хотят извлечь некоторые данные, чтобы они могли отобразить их на веб-сайте.Приложение имеет возможность экспорта, которая записывает необходимые данные в файл MS Access .MDB.

Мы написали простую программу с использованием драйверов JET от MS, которая просто скопировала соответствующие таблицы в базу данных SqlServer, где другая программабудет выполнять запросы против них, чтобы собрать то, что было необходимо.Это работало нормально в течение нескольких лет.

Затем поставщик обновил свое проприетарное приложение, и хотя файлы .MDB выглядят одинаково и отображают правильные данные при просмотре в MS Access, то, что мы получаем в нашемПрограмма, когда мы извлекаем записи с драйверами JET, повреждена.Иногда выглядит, что выравнивания полей неверны - числовое поле, которое должно содержать 23,40, будет содержать .23, я получаю даты в 2150-х годах и т. Д.

Моя программа, работающая на моем компьютере, обрабатывает то же самоефайл работает правильно.Эта же программа, работающая на серверах, на которых она должна работать, считывает поврежденные данные.

Я заметил, что версия драйвера JET - msjetoledb40.dll - выше, а дата новее - на моем Windows 7коробку, чем на любом из серверов, на которых мы это пробовали.поэтому я подумал, что это может быть проблема с устаревшим драйвером.К сожалению, последняя доступная версия драйверов JET - это SP 8.0, это версия, которую мы установили, и которая не работает.Более поздние версии доступны только при установке ОС.

Итак:

Есть ли способ получить и установить более современные драйверы JET?

Не вводят ли нас в заблуждение различия версийв драйверах JET?Есть ли что-то еще, что может вызывать проблему, на которую мы должны обратить внимание?

Существуют ли какие-либо другие средства или средства для извлечения данных из файла MS Access .MDB?(Примечание: это защищенный паролем файл, поэтому нам понадобится инструмент, который сможет это обработать).

Ответы [ 3 ]

1 голос
/ 11 марта 2011

SQL Server поставляется с различными способами импорта данных. Вы всегда можете взглянуть на создание задания SSIS, которое извлекает данные. Вы не упомянули, какая это версия SQL Server, но вам не нужно использовать приложение клиента для импорта данных.

0 голосов
/ 21 декабря 2013

У меня фактически есть веб-сайт VB ASP.NET, который использует базу данных Access 2000 в качестве бэкэнда.Конечно, я использую его только как файл только для чтения, но я уверен, что запись в него также будет работать.Вам не нужно ничего делать с SQLServer с этим методом.Затем вы можете написать свои собственные методы для доступа к таблицам и запросам в базе данных.

Public Class AccessDatabase
    Friend db As New OleDbConnection
    Private sPath As String

    Public Sub New(ByRef sPath As String)
        GetDatabase(sPath)
    End Sub

    'Use Server.MapPath("App_Data\WebContent.mdb") to load the database.
    Private Function GetDatabase(ByRef sPath As String) As OleDbConnection
        Try
            If db.State <> System.Data.ConnectionState.Open Then
                db = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath)
                db.Open()
            End If
        Catch e As Exception
            Throw New Exception("Error happened when opening " & sPath, e)
        End Try
        Return db
    End Function

    Public Sub Close()
        If db.State <> Data.ConnectionState.Closed Then
            db.Close()
        End If
    End Sub

    Protected Overrides Sub Finalize()
        Try
            If Not db Is Nothing Then
                If db.State <> Data.ConnectionState.Closed Then
                    db.Close()
                End If
            End If
        Catch ex As Exception
        End Try
    End Sub
End Class
0 голосов
/ 11 марта 2011

Если у вас есть копия Access, вы можете настроить DSN для SQL Server, а затем связать таблицы с SQL Server для Access.(Файл | Получить внешние данные | Ссылка или что-то в этом роде.) Сделав это, вы можете использовать запросы Access для передачи данных до SQL Server.

...