2013-05-06 68 views
1

我正在將CSV文件導入到SQL的ASP .NET應用程序。我能夠導入.csv,但是如果除了數字之外還有其他列,則其中一列包含空值。使用MS Jet OLEDB導入.csv問題

該行進口罰款:

1109,003,IN,0093219095,3/17/2013,3/21/2013,,Sobeys Warehouse,4819.13,61.37,4880.50,RV,1109-003 

第四列是在SQL NULL:

1109,999,IN,REF 44308/S. DRA,3/18/2013,3/21/2013,,"EC Rebates W/E -02 14, 2013",-200.02,0.00,-200.02,SA,1109-999 

有文字它們導入精細其他所有列,只是第四個是一個問題。我無法弄清楚受影響的專欄與其他專欄可能會有什麼不同。如果我用它輸入的數字替換文本,那麼它與文本數據有關。 SQL字段是nvarchar(50),所以它不是數據類型問題。

我的連接字符串(DIR包含文件夾的路徑):

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + dir + "\\\";Extended Properties='text;HDR=Yes;FMT=Delimited(,)';"; 

導入代碼:

public DataTable GetCSV(string path) 
    { 
     if (!File.Exists(path)) 
     { 
      return null; 
     } 

     DataTable dt = new DataTable(); 
     string fullPath = Path.GetFullPath(path); 
     string file = Path.GetFileName(fullPath); 
     string dir = Path.GetDirectoryName(fullPath); 
     string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + dir + "\\\";Extended Properties='text;HDR=Yes;FMT=Delimited(,)';"; 
     string query = "SELECT * FROM " + file; 
     System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(query, connString); 

     try 
     { 
      da.Fill(dt); 
     } 
     catch (InvalidOperationException) 
     { 
     } 

     da.Dispose(); 

     return dt; 
    } 
+0

你能看到'OleDbDataAdapter'中的數據嗎?你也不應該吞下'InvalidOperationException'。 – 2013-05-06 14:01:08

+2

文件中的哪一行是問題一?通過讀取文件的前8行(默認情況下),Jet提供者[猜測正確的數據類型](http://msdn.microsoft.com/en-us/library/ms141683.aspx),所以如果第9行是一個字符串,那麼你可能會看到這個問題。儘管我不確定您爲什麼使用這種方法,而不是['BULK INSERT'或'OPENROWSET'](http://msdn.microsoft.com/zh-cn/library/ms175915.aspx)。 – Pondlife 2013-05-06 14:25:29

+0

我把它加載到一個數據表中,這樣我就可以掃描這些行以排除無效記錄。它是一個從Excel保存的CSV,因此有數千個記錄爲空。一旦它清理乾淨,我批量插入它。問題排在幾百下,所以你的建議是有道理的。有沒有辦法強制數據類型? – Kerberos42 2013-05-06 16:27:33

回答

0

這解決了我的問題。感謝Pondlife讓我指出正確的方向。我認爲它與數據類型有關,只是不知道它在哪裏被挖掘。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms709353%28v=vs.85%29.aspx

+1

僅供參考,僅鏈接的答案[不被認爲是理想的](http://meta.stackexchange.com/questions/92505/should-i-flag-answers-which-contain-only-a-link-as-not-an-answer),因爲鏈接斷裂並且沒有上下文。編輯你的答案,給你一個簡短的解釋,你做得很好。 – Pondlife 2013-05-06 20:32:43