读入datatable的csv使一行成为列名

时间:2012-01-19 15:43:50

标签: c# csv ado.net datatable

我正在从数据表中读取csv文件,并且正在发生一些事情。

这是阅读

 OpenFileDialog openFileDialog1 = new OpenFileDialog();
 openFileDialog1.Filter = "CSV Files|*.csv";
 openFileDialog1.Title = "Select a CSV File";
 if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {

            string connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Text;", System.IO.Path.GetDirectoryName(openFileDialog1.FileName));
            string cmdString = string.Format("SELECT * FROM {0}", System.IO.Path.GetFileName(openFileDialog1.FileName));
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmdString, connString);
            DataTable tbl = new DataTable();
            dataAdapter.Fill(tbl);
            TableBuilder b = new TableBuilder(tbl);
            List<SingleTable> tablelist = b.TableList;
        }

当我查看可视化工具中的数据表时,它看起来像 ![第一行,而不是一行,是一个列标题] [1]

原始csv看起来像这样

![原csv] [2]

有人可以告诉我为什么数据表将第一行转换为列吗?我应该怎么做才能保留第一排?

3 个答案:

答案 0 :(得分:1)

尝试告诉OLEDB-Provider该文件没有标题

Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Text;HDR=no;

或者看看这个SO-Answer:https://stackoverflow.com/a/4598862/284240

答案 1 :(得分:1)

不确定这是否是您所需要的,因为您的问题似乎缺少某些内容。 但您可以将连接字符串更改为:

string connString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Text;HDR=No", System.IO.Path.GetDirectoryName(openFileDialog1.FileName));

这将告诉连接第一行不是标题行。

答案 2 :(得分:0)

通常,如果你在数据中嵌入了额外的“,”,这会将每个逗号视为一个单独的列,当我做同样的事情时,我会发生这种情况。我必须检查导致该字段的列数据偏移..也有你正在创建的标题..?