2013-03-29 28 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 –

相關問題