未找到数据源名称,也未指定默认驱动程序
本文关键字:未指定 默认 驱动程序 数据源 | 更新日期: 2023-09-27 18:00:32
我被要求将使用MVP模式的WinForms应用程序移植到网页上。该应用程序将CSV文件上传到DataTable,然后进行一些工作。
CSV文件上传到服务器OK,然后用以下代码读取
string connectionString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq=C:'Temp'";
//check that file exists and in correct format
if (File.Exists(this.WorkingFileName))
{
using (OdbcConnection connection = new OdbcConnection(connectionString))
{
// Determine number of rows
string selectCount = "select count(*) from [MyFile.csv]");
using (OdbcCommand command = new OdbcCommand(selectCount, connection))
{
connection.Open();
}
}
}
在这一点上,我得到了错误:
错误[IM002][Microsoft][ODBC驱动程序Manager]找不到数据源名称并且没有默认的驱动程序指定
现在,该代码在WinForms中运行良好,但在web上失败。我是否需要在IIS、配置文件或其他文件中进行更改才能使此代码正常工作?还是我需要做一些更基本的事情?
更新
好吧,所以我计算出了我的两个代码版本之间的不同:WinForms版本是32位运行的,当我把它改为64位时,它就抛出了同样的错误。请参阅:windows 7 上64位应用程序的32位文本驱动程序(Microsoft Access、Microsoft Excel和文本文件)
为了解决问题,我安装了Access 64位驱动程序http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13255,但我仍然得到相同的错误。
如果我检查ODBC数据源管理员,我可以看到"Microsoft Access文本驱动程序(*.txt,*.csv)|14.00.47600.1000|Microsoft Corporation|ACEODBC.dll
所以看起来它们安装得还可以,那么为什么它仍然会失败呢?
好的,我发现了问题。只是总结一下我的解决方案的所有部分。
- 卸载任何32位Office应用程序(步骤2需要)
- 安装Access 64位驱动程序
- 重新安装任何32位Office应用程序
-
更改中的连接字符串两个位置,如下所示:
@"驱动程序={Microsoft Access文本驱动程序(*.txt,*.csv)};扩展程序=asc,csv,tab,txt;持久安全信息=False;Dbq=C:''Temp''"
注意:
- 驱动程序名称已更改为Microsoft访问文本驱动程序
- 文件扩展名的分隔符已从分号更改到逗号
我没有发现逗号的变化,这给我带来了很多痛苦:-(
这可能是由于Web服务器没有安装Jet Library,我认为它提供了文本驱动程序。它可能是在本地安装的,因为附带了MS Office(同样,我相信是这样)
连接字符串格式正确吗?dbq参数似乎是错误的。
"Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq=**C:Temp''**"
还可以看看这个链接,提供有用的连接字符串示例