从文本文件导入时 DataSet 中缺少列

Missing Columns in DataSet when importing from Text File

我正在尝试通过 C# 将 pipe-delimited 文本文件导入数据集。某些列未导入 headers.

这是我的源数据:

Apple|Orange|Banana|Grape|Mango|Guava|Apricot|Pear|Peach
0C025X0|530335|WEROERWORUWEORWEU||Misc.||0|1|0

这是我的代码:

         bool conversionStatus = true;

         //instantiate new Excel Object
        Application xlApp = new Application();
        _Workbook wb = null;
        if (xlApp == null)
        {
            Console.WriteLine("Excel is not properly installed!!");
            Console.ReadLine();
            return false;
        }


        //OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(filePath) + "; Extended Properties = \"text;HDR=No;FMT=TabDelimited\"");
        OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + Path.GetDirectoryName(filePath) + "; Extended Properties = \"text;HDR=No\"");
        conn.Open();

        OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + Path.GetFileName(filePath), conn);

        DataSet ds = new DataSet("Temp");
        adapter.Fill(ds);

我的格式设置在 schema.ini 文件中,如下所示:

[Master.txt]
Format=Delimited(|)
ColNameHeader=False

以下是数据在数据集中的样子。

有谁知道为什么有些 headers 被包括在内,而另一些没有?

我可以重现你的情况,我已经解决了将 schema.ini 文件更改为

[Master.txt]
Format=Delimited(|)
ColNameHeader=False
Col1=Name1 Text Width 100
Col2=Name2 Text Width 100
Col3=Name3 Text Width 100
Col4=Name4 Text Width 100
Col5=Name5 Text Width 100
Col6=Name6 Text Width 100
Col7=Name7 Text Width 100
Col8=Name8 Text Width 100
Col9=Name9 Text Width 100

使用示例设置列列表 name and type 似乎可以解决问题。

经过一番研究后,我注意到缺失值来自具有冲突类型值的列。

例如,F2 列的第一行应包含单词 ORANGE,但下一行包含一个数字,同样的情况也发生在具有缺失值的所有其他列中。所以我认为文本驱动程序已决定为列提供数字类型,当然,不能表示该列中的字符串值。
现在为了验证这个理论,我将这些行添加到您的代码中:

adapter.Fill(ds);
DataTable dt = ds.Tables[0];
Console.WriteLine(dt.Columns["F2"].DataType);  // prints Int32

宾果游戏。驱动程序为 F2 列选择了 Int32 数据类型,ORANGE 一词不能在那里显示。

要修复它,您可以将列名及其数据类型添加到 schema.ini 中,以避免实际列值之间的歧义。