【发布时间】:2017-01-04 13:32:37
【问题描述】:
我有一个 CSV 文件,但在使用的文件中没有逗号分隔符。 如何将这些数据复制到我的数据库中?所以 CSV 文件和数据库应该有 1 列。
这是我迄今为止尝试过的:
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
在我的数据库中将是完全相同的值。
【问题讨论】:
-
抱歉,我不明白您所说的“没有逗号分隔”的 CSV 文件是什么意思。你能提供一个你正在导入的数据的例子吗?
-
@MaurizioPozzobon Ye,现在我再次阅读它确实有点模糊。我正在阅读 CSV,但 CSV 的即时阅读内容不包含任何逗号分隔符,这就是为什么我的数据库文件中只有 1 列的原因。我在我的问题中添加了一个示例
-
你能调试一下,看看 colFields 中有多少列,我的意思是 fieldData.Length == ??
-
如果您的文件有这些 |和 - 登录,你需要做更多的工作.. 但是如果它只有 1 个值,它不是 csv,它只是一个文本文件,那么你在加载数据并将其放入 sql 时有什么问题
-
@FacundoLaRocca fieldData.Lenth 取决于读取的每一行。您想知道错误处的 fieldData.Length 是什么吗?