2013-03-29 15 views
5

Sto provando a leggere un file csv utilizzando il seguente codice. Il file ha anche intestazioni di colonne.Impossibile leggere correttamente il file csv utilizzando il provider Microsoft.Jet.OLEDB.4.0

Di seguito è riportato l'output dopo aver caricato il file nel set di dati. 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; 
} 

dati campione di file 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 

Problema:

  • primi dati della colonna viene convertito da F01 a 1.
  • ho cercato con Access 12.0 dei driver anche.

risposta

4

Quello che stai vedendo sono i driver OLEDB che cercano di farti un favore e dedurre i tipi di dati delle tue colonne. Nel tuo caso vede tutti gli "F01" nella prima colonna e le cifre che vuoi che i numeri in quella colonna contengano dati numerici.

È possibile specificare i tipi di dati delle colonne CSV creando un file di testo denominato schema.ini nella stessa cartella del CSV. In questo file specificherete per ciascuna colonna nel vostro file di dati il ​​nome della colonna e il tipo di dati della colonna. Ecco un esempio dei tuoi dati:

[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 

Ci sono altre proprietà che puoi definire nel file schema.ini. Per maggiori dettagli vedi this.

Se non è possibile o non si desidera creare lo schema.ini a mano, è possibile creare il file a livello di codice, prima di tentare di leggere i CSV.

Consiglio vivamente di non utilizzare OLEDB per leggere i CSV se è possibile evitarlo. Ci sono un certo numero di lettori CSV altamente capaci là fuori e se i dati di esempio che hai fornito nella tua domanda sono del tutto simili ai tuoi dati reali, allora scommetto che troverai qualcuno di questi più facile da usare di OLEDB. La tua domanda ha riportato alcuni ricordi dolorosi.

+1

Grazie mille. Ha funzionato come un fascino. Mi sono riferito per esempio di lavoro http://www.codeproject.com/Articles/11435/Importing-CSV-Data-and-saving-it-in-database –

Problemi correlati