Пытаюсь подключиться к Ms Access Db, но у меня нет прав администратора или ACE.OLEDB.16.0 - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь написать программу C#, которая перенесет большой список Ms Access Dbs на сервер Ms Sql. В настоящее время у меня нет проблем с подключением к серверу Ms Sql, но Access был кирпичной стеной.

Я пробовал с. Net Core с использованием Odb c, но я не могу решить ошибку «Имя источника данных не найдено и отсутствует драйвер по умолчанию». независимо от того, что я вложил, поэтому я переключился на новый проект с использованием. Net Framework, думая, что более старый может означать, что у меня больше шансов.

Кажется, что в моей системе установлен Microsoft.Jet.OLEDB.4.0, но он не распознает мою базу данных Access, имеющую формат «* .accdb». Используя inte rnet, я обнаружил, что должен попытаться переключиться на Microsoft.ACE.OLEDB.16.0, но, к сожалению, этот провайдер не зарегистрирован на локальном компьютере.

У меня нет права администратора, поэтому моя попытка установить AccessDatabaseEngine, как было предложено, оказалась бесплодной.

Что бы вы порекомендовали? Я попытаюсь получить C#, чтобы открыть соединение с базами данных Ms Access.

ОБНОВЛЕНИЕ: Я написал сценарий, который я запускал в 86x и 64x, что должно помочь мне подключиться. Может ли кто-нибудь помочь улучшить этот сценарий, чтобы я мог быстро определить, как подключиться к базе данных доступа (* .accdb) с любого компьютера.

string[] filePaths = Directory.GetFiles(pathToAccessDbs);
List<string> providers = new List<string>();

var oleEnum = new OleDbEnumerator();
var elems = oleEnum.GetElements();
if (elems != null && elems.Rows != null)
    foreach (System.Data.DataRow row in elems.Rows)
        if (!row.IsNull("SOURCES_NAME") && row["SOURCES_NAME"] is string)
        {
            Console.WriteLine(row["SOURCES_NAME"]);
            providers.Add(row["SOURCES_NAME"].ToString());
            providers.Add("{" + row["SOURCES_NAME"].ToString() + "}");

        }
RegistryKey reg = null;
Console.WriteLine("**********CurrentUser");
try
{
    reg = (Registry.CurrentUser).OpenSubKey("Software");
    reg = reg.OpenSubKey("ODBC");
    reg = reg.OpenSubKey("ODBC.INI");
    reg = reg.OpenSubKey("ODBC Data Sources");
    if (reg != null)
    {

        Console.WriteLine("--Value");
        foreach (string item in reg.GetValueNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item + "}");
            var val = reg.GetValue(item);
            Console.WriteLine(val);
            providers.Add(val.ToString());
            providers.Add("{" + val.ToString() + "}");
        }
        Console.WriteLine("--Subkeys");
        foreach (string item in reg.GetSubKeyNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item.ToString() + "}");
        }
    }
}
catch { }

Console.WriteLine("**********LocalMachine");
try
{
    reg = (Registry.LocalMachine).OpenSubKey("Software");
    reg = reg.OpenSubKey("ODBC");
    reg = reg.OpenSubKey("ODBC.INI");
    reg = reg.OpenSubKey("ODBC Data Sources");
    if (reg != null)
    {

        Console.WriteLine("--Value");
        foreach (string item in reg.GetValueNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item + "}");
            var val = reg.GetValue(item);
            Console.WriteLine(val);
            providers.Add(val.ToString());
            providers.Add("{" + val.ToString() + "}");
        }
        Console.WriteLine("--Subkeys");
        foreach (string item in reg.GetSubKeyNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item.ToString() + "}");
        }
    }
}
catch { }

Console.WriteLine("**********CurrentConfig");
try
{
    reg = (Registry.CurrentConfig).OpenSubKey("Software");
    reg = reg.OpenSubKey("ODBC");
    reg = reg.OpenSubKey("ODBC.INI");
    reg = reg.OpenSubKey("ODBC Data Sources");
    if (reg != null)
    {

        Console.WriteLine("--Value");
        foreach (string item in reg.GetValueNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item + "}");
            var val = reg.GetValue(item);
            Console.WriteLine(val);
            providers.Add(val.ToString());
            providers.Add("{" + val.ToString() + "}");
        }
        Console.WriteLine("--Subkeys");
        foreach (string item in reg.GetSubKeyNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item.ToString() + "}");
        }
    }
}
catch { }

Console.WriteLine("**********Users");
try
{
    reg = (Registry.Users).OpenSubKey("Software");
    reg = reg.OpenSubKey("ODBC");
    reg = reg.OpenSubKey("ODBC.INI");
    reg = reg.OpenSubKey("ODBC Data Sources");
    if (reg != null)
    {

        Console.WriteLine("--Value");
        foreach (string item in reg.GetValueNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item + "}");
            var val = reg.GetValue(item);
            Console.WriteLine(val);
            providers.Add(val.ToString());
            providers.Add("{" + val.ToString() + "}");
        }
        Console.WriteLine("--Subkeys");
        foreach (string item in reg.GetSubKeyNames())
        {
            Console.WriteLine(item);
            providers.Add(item);
            providers.Add("{" + item.ToString() + "}");
        }
    }
}
catch { }

List<string> returnConnectionStrings = new List<string>();
foreach (string filePath in filePaths)
{
    foreach (string pr in providers)
    {

        Console.WriteLine("///////////////////// " + pr);
        string connectiontest = @"Provider=" + pr
            + "; Data Source Name=" + pr
            + "; Driver=" + pr
            + "; Default Driver=" + pr
            + "; Dsn=" + pr 
            + "; Data Source Name=" + pr
            + "; Data Source=" + filePath
            + "; Dbq=" + filePath
            + "; Jet OLEDB:Database Password=" + vbaPass
            + "; Uid=Admin; Pwd=" + vbaPass
            + "; User Id=Admin; Password=" + vbaPass;
        OleDbCommand cmd = null;
        OdbcCommand cmdOdbc = null;
        try
        {

            OleDbConnection connection = new OleDbConnection(connectiontest);
            connection.Open();
            cmd = connection.CreateCommand();

        }
        catch (Exception e)
        {
            Console.WriteLine((e.Message));
        }
        try
        {

            OdbcConnection connectionOdbc = new OdbcConnection(connectiontest);
            connectionOdbc.Open();
            cmdOdbc = connectionOdbc.CreateCommand();

        }
        catch (Exception e)
        {
            Console.WriteLine((e.Message));
        }

        Console.WriteLine("-----------------------------------------");
        if (cmd is null && cmdOdbc is null) continue;
        Console.WriteLine("-----------------------------------------");
        Console.WriteLine("-----------------------------------------");
        Console.WriteLine("-----------------------------------------");
        try
        {
            if(cmd != null)
            {

                cmd.CommandText = "Select * FROM Branches";
                var a = cmd.ExecuteScalar();
                Console.WriteLine(a);
                Console.WriteLine("This works: " + pr);
            } 
        } catch (Exception e)
        {
            Console.WriteLine((e.Message));
        }
        try
        {
            if (cmdOdbc != null)
            {

                cmdOdbc.CommandText = "Select * FROM Branches";
                var a = cmdOdbc.ExecuteScalar();
                Console.WriteLine(a);
                Console.WriteLine("This Works: " + pr);

            }
        }
        catch (Exception e)
        {
            Console.WriteLine((e.Message));
        }
    }
    string connectionString = @"Provider=ADsDSOObject;Data Source=" + filePath;

    returnConnectionStrings.Add(connectionString);
}

Вывод:

SQLOLEDB
MSDMine
MSDataShape
SQLNCLI11
ADsDSOObject
MSOLEDBSQL
MSOLEDBSQL Enumerator
MSDMine Enumerator
SQLNCLI11 Enumerator
Windows Search Data Source
MSOLAP
MSOLAP
MSDASQL
MSDASQL Enumerator
MSOLAP
MSOLAP
Microsoft.Jet.OLEDB.4.0
SQLOLEDB Enumerator
MSDAOSP
MSDAORA
**********CurrentUser
--Value
dBASE Files
Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)
Excel Files
Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
MS Access Database
Microsoft Access Driver (*.mdb, *.accdb)
Visio Database Samples
Microsoft Access Driver (*.mdb, *.accdb)
--Subkeys
**********LocalMachine
**********CurrentConfig
**********Users
///////////////////// SQLOLEDB
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.
Invalid connection string attribute
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {SQLOLEDB}
The '{SQLOLEDB}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSDMine
Unspecified error
Error Code = 0x80040E21, External Code = 0x00000000:.
Errors in the OLE DB provider. The Extended Properties property is set to a value that is not supported.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSDMine}
The '{MSDMine}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSDataShape
Data provider could not be initialized.
[Microsoft][ODBC Driver Manager] Data source name too long
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSDataShape}
The '{MSDataShape}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// SQLNCLI11
Login timeout expired
A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
Invalid connection string attribute
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {SQLNCLI11}
The '{SQLNCLI11}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// ADsDSOObject
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
-----------------------------------------
-----------------------------------------
-----------------------------------------
'ADsDSOObject' failed with no error message available, result code: DB_E_ERRORSINCOMMAND(0x80040E14).
///////////////////// {ADsDSOObject}
The '{ADsDSOObject}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSOLEDBSQL
Login timeout expired
A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
Invalid connection string attribute
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSOLEDBSQL}
The '{MSOLEDBSQL}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSOLEDBSQL Enumerator
The 'MSOLEDBSQL Enumerator' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSOLEDBSQL Enumerator}
The '{MSOLEDBSQL Enumerator}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSDMine Enumerator
The 'MSDMine Enumerator' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSDMine Enumerator}
The '{MSDMine Enumerator}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// SQLNCLI11 Enumerator
The 'SQLNCLI11 Enumerator' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {SQLNCLI11 Enumerator}
The '{SQLNCLI11 Enumerator}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Windows Search Data Source
The 'Windows Search Data Source' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Windows Search Data Source}
The '{Windows Search Data Source}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSOLAP
Unspecified error
Error Code = 0x80040E21, External Code = 0x00000000:.
Errors in the OLE DB provider. The Extended Properties property is set to a value that is not supported.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSOLAP}
The '{MSOLAP}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSOLAP
Unspecified error
Error Code = 0x80040E21, External Code = 0x00000000:.
Errors in the OLE DB provider. The Extended Properties property is set to a value that is not supported.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSOLAP}
The '{MSOLAP}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSDASQL
The .Net Framework Data Provider for OLEDB (System.Data.OleDb) does not support the Microsoft OLE DB Provider for ODBC Drivers (MSDASQL). Use the .Net Framework Data Provider for ODBC (System.Data.Odbc).
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSDASQL}
The '{MSDASQL}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSDASQL Enumerator
No such interface supported
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSDASQL Enumerator}
The '{MSDASQL Enumerator}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSOLAP
Unspecified error
Error Code = 0x80040E21, External Code = 0x00000000:.
Errors in the OLE DB provider. The Extended Properties property is set to a value that is not supported.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSOLAP}
The '{MSOLAP}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSOLAP
Unspecified error
Error Code = 0x80040E21, External Code = 0x00000000:.
Errors in the OLE DB provider. The Extended Properties property is set to a value that is not supported.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSOLAP}
The '{MSOLAP}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Microsoft.Jet.OLEDB.4.0
Cannot start your application. The workgroup information file is missing or opened exclusively by another user.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Microsoft.Jet.OLEDB.4.0}
The '{Microsoft.Jet.OLEDB.4.0}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// SQLOLEDB Enumerator
No such interface supported
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {SQLOLEDB Enumerator}
The '{SQLOLEDB Enumerator}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSDAOSP
Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSDAOSP}
The '{MSDAOSP}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MSDAORA
Oracle client and networking components were not found. These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3.3 or later client software installation.

Provider is unable to function until these components are installed.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MSDAORA}
The '{MSDAORA}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// dBASE Files
The 'dBASE Files' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {dBASE Files}
The '{dBASE Files}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)
The 'Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)}
The '{Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Excel Files
The 'Excel Files' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Excel Files}
The '{Excel Files}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)
The 'Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}
The '{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// MS Access Database
The 'MS Access Database' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {MS Access Database}
The '{MS Access Database}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Microsoft Access Driver (*.mdb, *.accdb)
The 'Microsoft Access Driver (*.mdb, *.accdb)' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Microsoft Access Driver (*.mdb, *.accdb)}
The '{Microsoft Access Driver (*.mdb, *.accdb)}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Visio Database Samples
The 'Visio Database Samples' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Visio Database Samples}
The '{Visio Database Samples}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// Microsoft Access Driver (*.mdb, *.accdb)
The 'Microsoft Access Driver (*.mdb, *.accdb)' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------
///////////////////// {Microsoft Access Driver (*.mdb, *.accdb)}
The '{Microsoft Access Driver (*.mdb, *.accdb)}' provider is not registered on the local machine.
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
-----------------------------------------

Для комментария:

enter image description here

1 Ответ

0 голосов
/ 26 мая 2020

Чтобы использовать механизм данных ACE? Ну, начиная с office / access 2013, при установке Access не открывается рабочая копия ACE. (до 2013 года при простой установке Access была установлена ​​+ открыта рабочая копия ACE для использования, скажем, со сторонними приложениями. (VB6, FoxPro, c ++,. net).

Теперь устанавливаем Access НЕ предоставляет рабочую копию механизма данных ACE для третьих сторон.

Итак, просто установите механизм данных ACE отсюда:

https://www.microsoft.com/en-us/download/details.aspx?id=54920

И убедитесь, что вы устанавливаете версию с правильным размером бит (X86 для x32 бит). После этого вы можете подключиться к файлу доступа (accDB). Примечание для файлов "mdb" вам не нужно ничего устанавливать, поскольку механизм "JET" по умолчанию устанавливается как часть windows в течение более 20 лет.

После установки ACE (более новой версии JET) с использованием поставщиков ODB C или oleDB поставщики в net должны работать нормально. Однако вы должны принудительно использовать проект. net как x86 вместо «any cpu».

И если вы хотите перенести данные из баз данных Access в sql сервер? Небольшой повод "катить свой" с. net, Я настоятельно рекомендую вам использовать SSMA (sql помощник по миграции сервера для Access). Это можно найти здесь:

Вышеупомянутое не только перенесет данные, но и настроит существующие индексы, сохранит существующий PK и даже загрузит (сохранит) связи таблиц без изменений. Если у вас всего несколько простых таблиц, вы даже можете использовать SQL manger для импорта из Access. Но если вы хотите сэкономить массу работы и вам не придется заново создавать PK, вам не придется заново создавать индексы и не создавать заново существующие связи таблиц? Тогда вы сэкономите огромное количество работы, используя помощник по миграции Sql на сервер sql. SSMAA также автоматически добавит столбец «отметка времени» (версия строки) в каждую таблицу. Итак, я настоятельно рекомендую использовать этот инструмент. (Я также рекомендовал вам добавить столбец TS в каждую таблицу - net будет использовать его для проблем с параллелизмом, как и Access, если вы используете Access в качестве внешнего интерфейса для sql сервера).

Вы найдите это здесь: https://www.microsoft.com/en-us/download/details.aspx?id=54255

У этого инструмента есть «немного» кривой обучения, но это действительно лучший инструмент для этой работы.

Опять же, убедитесь, что вы используете x86 или x64 битную версию - есть две загрузки. И еще раз: эта утилита не будет работать, если вы не установили открытую копию ACE.

Edit - возможное предложение - использовать код доступа.

Рассмотрите возможность использования Access. «Причина» в том, что запросы на добавление доступа (sql) имеют «особую» возможность работать между двумя разными соединениями одновременно !. Вы не можете сделать это с большинством поставщиков. net. Фактически, вы не можете сделать это с большинством систем.

Это особенно актуально, если имя таблицы в этих «50» базах данных совпадает. И если схема в 50 базах данных такая же.

Итак, из пустой новой базы данных доступа?

Мы устанавливаем ОДНУ связанную таблицу с таблицей sql сервера. (используйте вкладку exernal data - ссылка на одну sql серверную таблицу).

Вы можете переименовать эту связанную таблицу во что угодно. Предположим, что

tblOutput

Теперь настройте еще одну связанную таблицу с первой базой данных Access (1 из 50).

Мы делаем это, так как теперь мы можем запустить доступ к построителю запросов. Перетащите исходную таблицу и ЗАТЕМ выберите на ленте запрос на добавление. Выберите связанную таблицу sql сервера.

Причина, ПОЧЕМУ мы это делаем, заключается в том, что вы можете использовать построитель GUI для сопоставления столбцов. Итак, у вас есть столбец от и столбец до. Это делается путем выбора поля (полей) из поля со списком в построителе запросов.

Пока? Мы не написали ни строчки кода. Теперь вы можете запустить этот запрос на добавление, и мы только что отправили данные на сервер sql. Итак, таблица 1. готова.

Теперь, если остальные 49 баз данных такие же?

Затем мы просто пишем небольшой l oop для связи с каждой из баз данных, а затем выполняем наш запрос на добавление.

Единственный вопрос, является ли имя таблицы в каждой из 50 одинаковых или разных? наш код vba будет таким:

Sub Main()

  ' process all mdb or accdb files in a folder
  
  Dim strDir        As String
  Dim strOneFile    As String
  
  strDir = "c:\test2\*.accDB"
  
  strOneFile = Dir(strDir)
  
  Do While strOneFile <> ""
  
     ' link to this database
     
     ' run the append query to send data to sql server
     Debug.Print strOneFile
     
     DoCmd.TransferDatabase acLink, "MS access", strOneFile, acTable, "tblCustomers", "tblSource", False
     
     ' above links table to tblSource
     
     ' now run append query:
     
     CurrentDb.Execute "qryAppend", dbFailOnError
     
     
      strOneFile = dir()
  Loop
  
  
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...