Имя источника данных не найдено при подключении к базе данных MSAccess с использованием ODBC с веб-сервера - PullRequest
0 голосов
/ 06 июля 2018

У меня есть веб-сайт ASP.NET, размещенный на IIS, который пытается запросить файл базы данных MSAccess, используя OdbcConnection.

Когда я запускаю код в LinqPad (под своей учетной записью), он работает нормально:

var databaseFilePath = @"C:\...\database.accdb";
var conn = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" 
    + databaseFilePath;
using (var odbc = new OdbcConnection(conn))
{
    odbc.Open();

    var cmd = new OdbcCommand(@"SELECT COUNT(*) FROM MyTable", odbc);
    Console.WriteLine($"Count = {cmd.ExecuteScalar()}");
}

Однако на той же машине, когда я запускаю этот код из IIS (работает под идентификатором пула приложений), происходит сбой со следующим исключением:

Exception Type: System.Data.Odbc.OdbcException
Error message: ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcConnectionOpen..ctor(OdbcConnection outerConnection, OdbcConnectionString connectionOptions)
at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.Odbc.OdbcConnection.Open()

Что мне нужно сделать, чтобы "разрешить" учетную запись удостоверения пула приложений для драйвера MSAccess (если это действительно проблема)?

1 Ответ

0 голосов
/ 06 июля 2018

В конечном итоге определено, что принципиальное отличие здесь - 64-битные и 32-битные, а не учетные записи пользователей. Драйвер, установленный в 32-битном офисе, работает только с 32-битным.

См. Ручная установка 64-разрядных драйверов ODBC MS Access при наличии 32-разрядной версии Office для получения дополнительной информации.

...