【问题标题】:Can't open csv file using OleDB无法使用 OleDB 打开 csv 文件
【发布时间】:2013-12-17 13:46:29
【问题描述】:

我是新手,所以我找不到解决问题的方法。我想使用 OleDB 读取 DataTable 中的 .csv 文件。这是我的代码

string file = "D:\\MyFile.csv";
        string dir = Path.GetDirectoryName(file);

        String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties='text;HDR=Yes;FMT=Delimited'";
        OleDbConnection objConn = new OleDbConnection(sConnectionString);

        objConn.Open();
        DataTable dt = new DataTable();
        OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + file + "]", objConn);
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
        objAdapter1.SelectCommand = objCmdSelect;
        objAdapter1.Fill(dt);
        objConn.Close();

但我收到一个错误:Microsoft Jet 数据库引擎找不到对象“D:\MyFile.csv”。确保对象存在并且正确拼写其名称和路径名。

文件在正确的位置,你能告诉我可能是什么问题吗?

【问题讨论】:

  • File.Exists(file) 有什么用?

标签: c# visual-studio-2010 csv oledb


【解决方案1】:

将文件放在 D:\ 的某个文件夹中,然后重试

GetDirectoryName 函数在使用时通常返回 ''

GetDirectoryName('C:\asd.txt') 返回 '' 所以像这样使用它

GetDirectoryName('C:\myfol\asd.txt') 它将返回 'C:\myfol'

并且您的代码正在连接目录名称,因此您很可能正在连接空白字符串 ''

在行中 1. String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + "; 2. sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0.; Data Source = ''; // as dir is ''

检查 http://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname(v=vs.110).aspx

寻求更多帮助。

【讨论】:

    【解决方案2】:

    您需要从该行中的文件名中删除路径:

    OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + file + "]", objConn);
    

    应该是:

    OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + Path.GetFileName(file) + "]", objConn);
    

    在连接字符串中你告诉引擎目录,在命令中你告诉引擎要使用的文件(路径可以看作是数据库的等价物,文件是表的等价物)。

    您可以如下改进:

    string file = "D:\\MyFile.csv";
    string dir = Path.GetDirectoryName(file);
    string name = Path.GetFileName(file);
    
    String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dir + ";Extended Properties='text;HDR=Yes;FMT=Delimited'";
    ...
    OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [" + name + "]", objConn);
    ...
    

    【讨论】:

      【解决方案3】:

      在选择查询中尝试使用实际文件名。

      SELECT * FROM [MyFile.csv]

      OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [MyFile.csv]", objConn);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 2020-11-16
        • 2015-05-08
        • 1970-01-01
        • 2016-06-14
        相关资源
        最近更新 更多