未找到数据源名称,也未指定默认驱动程序

本文关键字:未指定 默认 驱动程序 数据源 | 更新日期: 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

所以看起来它们安装得还可以,那么为什么它仍然会失败呢?

未找到数据源名称,也未指定默认驱动程序

好的,我发现了问题。只是总结一下我的解决方案的所有部分。

  1. 卸载任何32位Office应用程序(步骤2需要)
  2. 安装Access 64位驱动程序
  3. 重新安装任何32位Office应用程序
  4. 更改中的连接字符串两个位置,如下所示:

    @"驱动程序={Microsoft Access文本驱动程序(*.txt,*.csv)};扩展程序=asc,csv,tab,txt;持久安全信息=False;Dbq=C:''Temp''"

注意:

  1. 驱动程序名称已更改为Microsoft访问文本驱动程序
  2. 文件扩展名的分隔符已从分号更改到逗号

我没有发现逗号的变化,这给我带来了很多痛苦:-(

这可能是由于Web服务器没有安装Jet Library,我认为它提供了文本驱动程序。它可能是在本地安装的,因为附带了MS Office(同样,我相信是这样)

连接字符串格式正确吗?dbq参数似乎是错误的。

"Driver={Microsoft Text Driver (*.txt; *.csv)};Extensions=asc,csv,tab,txt;Persist Security Info=False;Dbq=**C:Temp''**"

还可以看看这个链接,提供有用的连接字符串示例