db中的数组插入

时间:2010-03-28 19:31:44

标签: c# sql mysql arrays

如何最好地将数组(100或更长)放入数据库(MySQL)?

我不希望多次访问数据库,因为它是如此加载的。

所以我的解决方案如下:

string insert = "INSERT INTO programs (name, id) VALUES ";

        for(int i = 0; i < name.Length; i++)
        {
            if (i != 0)
            {
                insert = insert + ",(";
            }
            else
            {
                insert = insert + "(";
            }

            insert = insert + "'" + name[i] + "','" + id[i] + "'";

            insert = insert + ")";
        }

        //INSERT INTO programs (name, id) VALUES ('Peter','32'),('Rikko','343') ....

但也许是一个更快的版本?

谢谢

4 个答案:

答案 0 :(得分:3)

如果用户可以更改名称和ID(可能的SQL注入),则您的解决方案非常不安全。我建议使用准备好的声明来加快速度。 MySQL documentation

中有一个例子

答案 1 :(得分:1)

我以前从未使用过MySql,而且我没有编译过这个,但这就是我接近它的方法。

我会定义一个参数化的sql字符串。然后我将定义我的参数对象,打开连接,然后遍历数组,将值分配给参数对象并执行语句。

using(var connection = new MySqlConnection("your connection string"))
{
    using(var command = new MySqlCommand("INSERT INTO programs (name, id) VALUES (?name, ?id)", connection))
    {
        var nameParameter = new MySqlParameter("name");
        var idParameter = new MySqlParameter("id");

        command.Parameters.Add(nameParameter);
        command.Parameters.Add(idParameter);

        connection.Open();

        for(int i = 0; i < name.Length; i++)
        {
             nameParameter.Value = name[i];
             idParameter.Value = id[i];

             command.ExecuteNonQuery();             
        }

        connection.Close(); //Dispose being called by the using should close connection, but it doesn't hurt to close it here/sooner either.         
    }
}

就像我说的那样,我之前没有使用过C#中的MySql,所以我不知道MySqlParameter类是否有一个接受参数名称的构造函数,但是你明白了。

答案 2 :(得分:0)

我觉得你可以做点什么

  INSERT INTO tbl_temp2 (fld_id)
  SELECT tbl_temp1.fld_order_id
  FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

并通过一个查询插入所有内容

答案 3 :(得分:0)

我认为你需要使用绑定变量。与大多数其他SQL数据库一样,MySQL确实允许它,它比一次创建和运行100个插入语句要快得多。

首先prepare你的SQL语句,放入绑定变量所在的?。然后execute使用一个数组,其中包含单个插入的所有值。

例如,

$stmt = $db->prepare("insert into table values (?, ?)");
$array = array(1, 2);
$result = $db->execute($stmt, $array);