如何操纵SQL表

时间:2014-06-10 17:24:24

标签: c# sql csv

我有以下代码,它读取每一行并获取行中的每个列值并将其添加到列表数组中:

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行开始?

1 个答案:

答案 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
}

备注:

  1. 我认为你真的很想引用并清除和清理你的插入内容,以保护自己免受sql注入。
  2. 您还可以从第一行读取列名称。