无法使用Microsoft.Jet.OLEDB.4.0提供程序正确读取csv文件

时间:2013-03-29 06:13:07

标签: c# csv ado.net oledb

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

以下是在数据集中加载文件后的输出。 Output after loading the data in dataset

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驱动程序。

1 个答案:

答案 0 :(得分:5)

您所看到的是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文件中定义其他属性。有关详细信息,请参阅this

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

我强烈建议您不要使用OLEDB来读取CSV,如果你可以完全避免它。有很多功能强大的CSV阅读器,如果您在问题中提供的样本数据完全像您的真实数据,那么我敢打赌您会发现这些数据比OLEDB更容易使用。你的问题带回了一些痛苦的回忆。