2013-03-29 11 views
5

Próbuję odczytać plik CSV za pomocą następującego kodu. Plik ma również nagłówki kolumn.Nie można poprawnie odczytać pliku CSV przy użyciu dostawcy Microsoft.Jet.OLEDB.4.0

Poniżej przedstawiono dane wyjściowe po załadowaniu pliku do zestawu danych. 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; 
} 

Przykładowe dane z pliku 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 

Problem:

  • Pierwsza kolumna danych jest przekształcany z F01 do 1.
  • Próbowałem z dostępem do 12,0 kierowców również.

Odpowiedz

4

To, co widzisz, to sterowniki OLEDB, które próbują ci wyświadczyć przysługę i określić typy danych w kolumnach. W twoim przypadku widzi wszystkie "F01" w pierwszej kolumnie i cyfry, które mają numery w tej kolumnie do przechowywania danych liczbowych.

Możesz określić typy danych swoich kolumn CSV, tworząc plik tekstowy o nazwie schema.ini w tym samym folderze co plik CSV. W tym pliku określisz dla każdej kolumny w pliku danych nazwę kolumny i typ danych kolumny. Oto przykład danych:

[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 

Istnieją inne właściwości, które można zdefiniować w pliku schema.ini. Aby uzyskać więcej informacji, patrz this.

Jeśli nie możesz lub nie chcesz utworzyć pliku schema.ini ręcznie, możesz go utworzyć programowo, zanim spróbujesz odczytać swoje pliki CSV.

Gorąco polecam, aby nie używać OLEDB do odczytu plików CSV, jeśli w ogóle można tego uniknąć. Istnieje wiele bardzo dobrych czytników CSV i jeśli przykładowe dane podane w pytaniu są w rzeczywistości podobne do rzeczywistych danych, to założę się, że łatwiej je wykorzystać niż OLEDB. Twoje pytanie wywołało bolesne wspomnienia.

+1

Wielkie dzięki. To działało jak czar. Podaję przykład pracy: http://www.codeproject.com/Articles/11435/Importing-CSV-Data-and-saving-it-in-database –