2017-01-04 121 views
0

我得到了一個CSV文件,但在文件中使用的文件中沒有逗號分隔符。 如何將這些數據複製到我的數據庫中?所以CSV文件和數據庫應該有1列。如何將1列從CSV文件複製到SQL數據庫?

這是我試過到目前爲止:

System.Data.DataTable csvData = new System.Data.DataTable(); 
try 
{ 
    using (TextFieldParser csvReader = new TextFieldParser(csv_file_path, Encoding.GetEncoding("windows-1250"))) //windows 1250 is de correcte character encoding voor europese characters 
    { 
     csvReader.SetDelimiters(new string[] { "," }); //change this maybe to something??? 
     csvReader.HasFieldsEnclosedInQuotes = true; 
     string[] colFields = csvReader.ReadFields(); 
     foreach (string column in colFields) 
     { 
      DataColumn datecolumn = new DataColumn(column); 
      datecolumn.AllowDBNull = true; 
      csvData.Columns.Add(datecolumn); 
     } 
     while (!csvReader.EndOfData) 
     { 
      string[] fieldData = csvReader.ReadFields(); 
      //Making empty value as null 
      for (int i = 0; i < fieldData.Length; i++) 
      { 
       if (fieldData[i] == "") 
       { 
        fieldData[i] = null; 
       } 
      } 
      csvData.Rows.Add(fieldData); // it return an error here saying that: `System.ArgumentException: Input array is longer than the number of columns in this table` 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 
InsertDataIntoSQLServerUsingSQLBulkCopy(csvData, tablenaam); 
return csvData; 

所以對於CSV的例子是:

test123  
test45,6  
test789 

而且在我的數據庫將是完全相同的值。

+0

很抱歉,但我不明白你的CSV文件「沒有逗號separeting」的意思。你能提供一個你正在導入的數據的例子嗎? –

+0

@MaurizioPozzobon葉,現在我再次讀到它的確有點模糊。我正在閱讀一個CSV,但CSV的即時閱讀包含了任何逗號分隔,所以這就是爲什麼我的數據庫文件只有1列。我在我的問題中添加了一個例子 –

+0

你可以調試它並查看在colFields中找到了多少列,我的意思是,fieldData.Length == ??如果你的文件有那些| | –

回答

1

編輯:瞭解實際定界符的評論,所以我已經更新了下面的代碼,是不是漂亮,但應該給你一個起點

爲什麼無法讀取該文件作爲一個簡單的文本文件。一次一行,解析預期的語法。

做這樣的事情(未測試,可能無法編譯)

string line; 
System.Data.DataTable csvData = new System.Data.DataTable(); 
csvData.Columns.Add("OnlyColumn", typeof(String)); 
System.IO.StreamReader file = new System.IO.StreamReader("c:\\test.txt"); 
while((line = file.ReadLine()) != null) 
{ 
    if(line.StartsWith("-")) 
     continue;   
    DataRow newRow = csvData.NewRow(); 
    newRow["OnlyColumn"] = line.Split('|')[1].Trim(); 
    csvData.Rows.Add(newRow); 
} 

file.Close(); 
InsertDataIntoSQLServerUsingSQLBulkCopy(csvData, tablenaam); 
+0

我得到一個錯誤@ if(line.StartsWith(' - '))':'不能從char轉換爲字符串' –

+0

這工作'if(line.StartsWith(「 - 」)) 繼續;'但我得到錯誤:在System.Data.dll中發生類型'System.ArgumentException'未處理的異常 其他信息:列'OnlyColumn'不屬於表 –

+0

您必須將該列添加到數據表中,我編輯了示例,但您應該將其視爲起點 –

0

也許你需要使用新的行分隔符不是逗號。我認爲你可以在新的方面有新的價值觀?

+0

我試過'csvReader.SetDelimiters(new string [] {Environment.NewLine}); '和'csvReader.SetDelimiters(新字符串[] {「\ n」);',但那些工作。我得到錯誤:'System.ArgumentException:TextfieldParser不支持包含行尾字符的分隔符' –

相關問題