将CSV文件转换为DataTable时出错将.txt添加到csv文件名

时间:2015-04-17 12:39:37

标签: c# csv datatable dataset oledb

以下是将csv文件转换为DataTabel的代码。

 public static DataTable ImportCSVtoDatatable(string filepath, string strQuery )
    {
        //strQuery = "Select * From [GJ20150417044150]";
        //string filepath= @"h$\\Data\\GJ20150417044150.csv";

        DataSet ds = new DataSet();
        var constring = string.Format(@"Provider=Microsoft.Jet.OleDb.4.0; Data Source={0};Extended Properties=""Text;HDR=YES;FMT=Delimited""", Path.GetDirectoryName(filepath));

        OleDbConnection con = new OleDbConnection(constring);

        OleDbDataAdapter da = new OleDbDataAdapter(strQuery, con);

        //Error Occuring on this step
        da.Fill(ds);
        DataTable dt = ds.Tables[0];
        return dt;
    }

我的程序崩溃了,我得到的错误如下:

  

Microsoft Jet数据库引擎找不到对象' GJ20150417044150.txt'。确保对象存在,并且您正确拼写其名称和路径名称。

我猜是,它正试图搜索" GJ20150417044150.txt"文件,但无法得到它,因为它实际上" GJ20150417044150.csv"文件并没有" GJ20150417044150.txt"在给定的路径中。

请帮助我:

1:如何摆脱此错误并选择所需的.csv文件以转换为数据表。

2:为什么在此过程中将.txt添加到GJ20150417044150

1 个答案:

答案 0 :(得分:1)

因此,解决这个问题的方法是改变这些行:

//strQuery = "Select * From [GJ20150417044150]";
//string filepath= @"h$\\Data\\GJ20150417044150.csv";

到这个

var fileName = Path.GetFileName(filepath); 
strQuery = @"SELECT * FROM " + fileName;

问题是正在使用的strQuery的值不包含完整文件名,而只包含GJ20150417044150部分,Jet引擎尝试将其附加到默认文本扩展名{{ 1}},当它找不到名为.txt的文件时。