6

我正在尝试使用以下代码读取 csv 文件。该文件也有列标题。

以下是在数据集中加载文件后的输出。 加载数据集中数据后的输出

public DataSet LoadCVS(string filePath)
{
    DataSet ds = new DataSet();
    string fileName = System.IO.Path.GetFileName(filePath);
    try
    {
        string path = @System.IO.Path.GetDirectoryName(filePath);

        using (OleDbConnection conn =
            new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + @";Extended Properties=""Text;HDR=Yes;FMT=Delimited"""))
        {
            using (OleDbCommand cmd =
                new OleDbCommand("SELECT * FROM [" + fileName + "]", conn))
            {
                conn.Open();
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);

                da.Fill(ds, "csv");
            }
        }
    }
    catch (Exception ex) //Error
    {
        MessageBox.Show(ex.Message);
    }
    return ds;
}

csv文件样本数据:

Org,Item Number,Item Description,Lot Number,Lot Expiration Date,Marketing Division,Product Type
F01,Jan-00,LFIT MORSE TAPER HEAD,MHD7D8,3-May-14,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MHATY9,1-Mar-14,5,5
F01,Jan-00,LFIT MORSE TAPER HEAD,MHDEN1,8-Mar-14,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MHNY4L,18-Nov-14,5,5
F01,Jan-10,LFIT MORSE TAPER HEAD,MHHLYR,31-May-14,5,5
F01,Jan-00,LFIT MORSE TAPER HEAD,MJNKRK,10-Oct-15,5,5
F01,Jan-00,LFIT MORSE TAPER HEAD,MKNN38,14-Nov-16,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MJDV6X,8-Apr-15,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MKAK94,22-Feb-16,5,5

问题:

  • 第一列数据从 F01 转换为 1。
  • 我也尝试过使用 Access 12.0 驱动程序。
4

1 回答 1

6

您所看到的是 OLEDB 驱动程序试图帮您一个忙并推断您的列的数据类型。在您的情况下,它会在第一列中看到所有 'F01' 并且您希望该列中的数字包含数字数据。

您可以通过在与 CSV 相同的文件夹中创建一个名为 schema.ini 的文本文件来指定 CSV 列的数据类型。在此文件中,您将为数据文件中的每一列指定列的名称和列的数据类型。这是您的数据的示例:

[NameOfYourCSVDataFile.csv]
Col1=Org Text
Col2="Item Number" Text
Col3="Item Description" Text
Col4="Lot Number"  Text
Col5="Lot Expiration Date" Text
Col6="Marketing Division" Text
Col7="Product Type" Text

您可以在 schema.ini 文件中定义其他属性。有关更多详细信息,请参阅

如果您不能或不想手动创建 schema.ini,您可以在尝试读取 CSV 之前以编程方式创建文件。

如果可以避免的话,我强烈建议不要使用 OLEDB 来读取 CSV。那里有许多功能强大的 CSV 阅读器,如果您在问题中提供的示例数据与您的真实数据完全一样,那么我敢打赌,您会发现其中任何一个都比 OLEDB 更易于使用。你的问题勾起了一些痛苦的回忆。

于 2013-03-29T07:07:25.470 回答