2017-01-04 72 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不支持包含行尾字符的分隔符' –

相关问题