使用 ODBC 从 Web 服务器连接到 MS Access 数据库时找不到数据源名称

Posted

技术标签:

【中文标题】使用 ODBC 从 Web 服务器连接到 MS Access 数据库时找不到数据源名称【英文标题】:Datasource name not found when connecting to MSAccess database using ODBC from web server 【发布时间】:2018-07-06 13:06:41 【问题描述】:

我有一个 IIS 托管的 ASP.NET 网站,它尝试使用 OdbcConnection 查询 MSAccess 数据库文件。

当我在 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】:

最终确定,这里的根本区别在于 64 位与 32 位,而不是用户帐户。 32位office安装的驱动只能在32位下运行。

请参阅Hand Install of 64-bit MS Access ODBC drivers when 32-bit Office is present 了解更多信息。

【讨论】:

以上是关于使用 ODBC 从 Web 服务器连接到 MS Access 数据库时找不到数据源名称的主要内容,如果未能解决你的问题,请参考以下文章

MS-Access ODBC 连接到 Oracle for SQL

除了 ms-access 之外,我可以使用哪些其他程序连接到 odbc 数据库

在 Access 中使用 ODBC 连接到 MS SQL Server 2012:手动调用查询和在 VBA 中调用查询之间的巨大时间差异

使用 ODBC 连接到 MYSQL 在 MS-Access 中运行 SQL 时出错

从 java 连接到 MS 访问

连接到 ODBC 时出现 MS Access 错误