C# 在数据库中插入数组

C# 在数据库中插入数组,c#,sql,mysql,arrays,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 =

如何最好地将数组(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') ....
string insert=“插入程序(名称、id)值”;
for(int i=0;i
但也许是更快的版本


谢谢

如果用户可以更改名称和ID(可能是SQL注入),那么您的解决方案是非常不安全的。我建议使用预先准备好的语句来加快速度。在

中有一个例子,如果用户可以更改名称和ID(可能是SQL注入),那么您的解决方案是非常不安全的.我建议使用预先准备好的语句来加快速度。

中有一个例子,我以前从未使用过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.         
    }
}
使用(var connection=newmysqlconnection(“您的连接字符串”))
{
使用(var命令=新的MySqlCommand(“插入程序(名称,id)值(?名称,id)”,连接))
{
var name参数=新的MySqlParameter(“名称”);
var idParameter=新的MySqlParameter(“id”);
command.Parameters.Add(nameparmeter);
command.Parameters.Add(idParameter);
connection.Open();
for(int i=0;i

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

我以前从未使用过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.         
    }
}
使用(var connection=newmysqlconnection(“您的连接字符串”))
{
使用(var命令=新的MySqlCommand(“插入程序(名称,id)值(?名称,id)”,连接))
{
var name参数=新的MySqlParameter(“名称”);
var idParameter=新的MySqlParameter(“id”);
command.Parameters.Add(nameparmeter);
command.Parameters.Add(idParameter);
connection.Open();
for(int i=0;i

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

我觉得你可以做类似的事情

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

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

我觉得您可以这样做

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

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

我认为您需要使用绑定变量。MySQL和大多数其他SQL数据库一样,确实允许这样做,而且它比一次创建和运行100条insert语句要快得多

首先
准备
您的SQL语句,将绑定变量放在
的位置。然后
使用包含单个插入的所有值的数组执行它

比如说,

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

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

首先
准备
您的SQL语句,将绑定变量放在
的位置。然后
使用包含单个插入的所有值的数组执行它

比如说,

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

到目前为止,构造SQL字符串是否已被正式弃用?构造SQL字符串是否已被正式弃用?我尝试了您的示例,但出现了以下错误:cmd.Parameters[“@number”].Value=I;然后我放入:cmd.Parameters.Add(新的MySqlParameter(“?City”,MySqlDbType.VarChar,40)).Value=city;现在显示错误:已经定义了参数“?city”。Ant只输入了一个值。我尝试了您的示例,但错误是:cmd.Parameters[“@number”]。Value=I;然后我输入:cmd.Parameters.Add(新的MySqlParameter(“?city”,MySqlDbType.VarChar,40)).Value=city;现在显示错误:已经定义了参数“?city”。Ant只输入一个值。