2013-03-29 36 views
5

Tôi đang cố gắng đọc tệp csv bằng cách sử dụng mã sau. Tệp cũng có các tiêu đề cột.Không thể đọc tệp csv đúng cách bằng cách sử dụng nhà cung cấp Microsoft.Jet.OLEDB.4.0

Sau đây là đầu ra sau khi tải tệp trong tập dữ liệu. 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; 
} 

dữ liệu mẫu của tập tin 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 

Vấn đề:

  • cột dữ liệu đầu tiên được chuyển đổi từ F01 đến 1.
  • Tôi đã thử với trình điều khiển truy cập 12.0 cũng thế.

Trả lời

4

Những gì bạn thấy là các trình điều khiển OLEDB đang cố gắng làm cho bạn một ưu tiên và suy ra các loại dữ liệu của các cột của bạn. Trong trường hợp của bạn, nó thấy tất cả các 'F01' trong cột đầu tiên và các số liệu bạn muốn các số trong cột đó chứa dữ liệu số.

Bạn có thể chỉ định loại dữ liệu của cột CSV bằng cách tạo tệp văn bản có tên schema.ini trong cùng thư mục với CSV của bạn. Trong tệp này, bạn sẽ chỉ định cho mỗi cột trong tệp dữ liệu của bạn tên cột và kiểu dữ liệu của cột. Dưới đây là ví dụ cho dữ liệu của bạn:

[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 

Có các thuộc tính khác mà bạn có thể xác định trong tệp schema.ini. Để biết thêm chi tiết, xem this.

Nếu bạn không thể hoặc không muốn tạo schema.ini bằng tay, bạn có thể tạo tệp theo chương trình, trước khi bạn cố gắng đọc CSV của mình.

Tôi đặc biệt khuyên bạn không nên sử dụng OLEDB để đọc CSV nếu bạn có thể tránh được nó. Có một số trình đọc CSV có khả năng cao ở đó và nếu dữ liệu mẫu bạn cung cấp trong câu hỏi của bạn giống như dữ liệu thực, thì tôi đặt cược bạn sẽ thấy dễ sử dụng hơn OLEDB. Câu hỏi của bạn đã mang lại một số kỷ niệm đau đớn.

+1

Cảm ơn rất nhiều. Nó làm việc như một say mê. Tôi đã tham khảo ví dụ làm việc http://www.codeproject.com/Articles/11435/Importing-CSV-Data-and-saving-it-in-database –

Các vấn đề liên quan