2013-03-29 33 views
5

我正在尝试使用以下代码读取csv文件。该文件也有列标题。使用Microsoft.Jet.OLEDB.4.0提供程序无法正确读取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
  • 我试图与接入12.0司机也。

回答

4

你看到的是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更容易使用。你的问题带来了一些痛苦的回忆。

+1

非常感谢。它像一个魅力。 我引用的工作示例http://www.codeproject.com/Articles/11435/Importing-CSV-Data-and-saving-it-in-database –

相关问题