2013-03-29 2 views
5

다음 코드를 사용하여 CSV 파일을 읽으려고합니다. 파일에는 열 머리글도 있습니다.Microsoft.Jet.OLEDB.4.0 공급자를 사용하여 csv 파일을 제대로 읽을 수 없습니다.

다음은 파일을 데이터 세트에로드 한 후의 출력입니다. 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; 
} 

샘플 데이터 :

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 –

관련 문제