我有一个ASP。. NET MVC应用程序(64位)运行在64位Windows系统(Windows Server 2012)。
我的web应用程序需要读取mdb数据库,然后我创建了下一个代码:
using (var myConnection = new OdbcConnection())
{
try
{
string myConnectionString = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + fileNameWithPath + ";Persist Security Info=True";
myConnection.ConnectionString = myConnectionString;
myConnection.Open();
OdbcCommand cmd = myConnection.CreateCommand();
cmd.CommandText = "SELECT * FROM myTable";
OdbcDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
// Load the result into a DataTable
myDataTable = new DataTable();
myDataTable.Load(reader);
}
catch (Exception exception)
{
//nexy exception is caught here: "ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"
}
finally
{
myConnection.Close();
}
}
其中fileNameWithPath为mdb文件路径。
当我执行上面的代码时,在
行中出现了下一个令人讨厌的异常 myConnection.Open();
:
ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not找到且未指定默认驱动
我已经检查了服务器,它已经安装了关于ODBC驱动程序的下一个文件:
文件odbcad32.exe文件夹下的C:WindowsSystem32
文件夹C:WindowsSysWOW64下的文件odbcad32.exe
我的问题是:我的服务器设置正确吗?我是否已经安装了64位版本的ODBC ?
和更重要的是:我可以用这种配置在x64服务器上运行x64应用程序吗?否则,还有其他选择吗?值得一提的是:
- 我不允许在服务器上安装额外的软件
- web应用程序必须是64位
要使用x32位版本的Access数据库引擎,则需要在该计算机上安装x32位版本的数据库引擎。
而要使用x64位版本的Access数据库引擎,则需要安装x64位版本的Access数据库引擎。
嘿,如果你需要读取oracle数据库,那么你需要安装oracle数据库引擎来读取驻留在磁盘驱动器上的oracle文件。
如果你不能安装任何额外的软件,比如oracle来读取oracle文件,或者SQL server来读取SQL server文件,或者在这个例子中是Access,那么你就是鸭子肥皂。实际上,要阅读PDF文件,你需要安装一些PDF文件软件。
所以除非你能解决不允许在你的服务器上安装合适的软件的问题,否则你将无法读取这些软件消耗的给定文件——这适用于几乎所有的软件系统——你需要在服务器上安装合适的软件来启用这些文件。
所以确实存在x32和x64位版本的Access数据库引擎(ACE),除非你被允许安装这样的软件,否则你不能读取和使用这样的数据。
所以请记住,在开发软件时,如果你想打开一个word文件或pdf文件,或者像任何软件系统一样,你将需要安装apoopate软件来处理这些文件- Access也不例外。如果你需要打开一个ppt文件,那么很明显你需要在那台电脑上安装ppt软件。
因此您需要在该服务器上获取并安装x64位版本的Access数据库引擎。既然你注意到你不能安装任何软件,那么你就不太可能实现你的目标。
我通过在IIS的应用程序池的高级设置中启用32位应用程序解决了一个非常类似的问题