我有以下代码,它读取每一行并获取行中的每个列值并将其添加到列表数组中:
foreach (string line in lines)
{
using (TextFieldParser parser = new TextFieldParser(textBox1.Text))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
colArray.Add(field);
colArray.ToArray();
MessageBox.Show(field);
}
MessageBox.Show(colArray.Count + "");
colArray.Clear();
}
}
}
我已经使用列名创建了表。
我如何插入每个列数据,直到到达表的行尾并重新开始?
P.S。第一行是标题,我如何跳过该行并从第2行开始?
答案 0 :(得分:2)
从您提供的代码中可以看出,您确实希望构建一个将插入数据库的整行。底层SQL可能如下所示:
insert into MyTable values ('a', 'b', 'c')
虽然输入文件如下所示:
header 1, header 2, header 3
a, b, c
为了实现这一点,您将在关闭while循环后组合该语句或数据库调用;当行完成并准备好插入时。
另外,只是注意,您的colArray.ToArray()
在没有将结果分配给变量的情况下实际上并没有做任何事情。
<强>更新强>
您已经询问了动态列,并且您的代码已经在该路径上。您还建议CSV中的数据行已经被引号转义了吗?如果是这种情况,那么我们就没有从TextFieldParser
中获益,我已将其从以下答案中删除:
foreach(string line in lines.Skip(1))
{
var sqlfmt = "insert into mytable values ({0})";
var insert = string.Format(sqlfmt, line);
// todo: somedb.execute_sqlcommand(insert); or something
}
备注:强>