C# 在数据库中插入数组
如何最好地将数组(100或更长的长度)放入数据库(MySQL) 我不想对数据库进行多重访问,因为它是如此加载的 因此,我的解决方案如下: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 =
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只输入一个值。