gpt4 book ai didi

c# - 如何在不使用存储过程的情况下使用 C# 中的 MySQLCommand 创建安全查询以在 MySQL 中执行批量插入?

转载 作者:可可西里 更新时间:2023-11-01 07:45:28 24 4
gpt4 key购买 nike

在下面的示例中,我构建了一个查询来对 MySQL 数据库进行批量插入:

const string QUERY = "INSERT INTO contacts (first_name,last_name) VALUES{0};";

public string BuildQuery(IEnumerable<contact> contacts)
{
List<string> values = new List<string>();

foreach (var contact in contacts)
{
values.Add(string.Format("('{0}','{1}')", contact.first_name, contact.last_name));
}

return string.Format(QUERY, string.Join(",", values));
}

结果可能是这样的:

INSERT INTO contacts (first_name,last_name) VALUES("J","Kappers"),("A","Temple")

我该怎么做才能编写更安全且不易发生 SQL 注入(inject)的查询?

最佳答案

const string QUERY = "INSERT INTO contacts (first_name,last_name) VALUES" + 
BuildQuery(c, contacts);

public string BuildQuery(MySQLCommand c, IEnumerable<contact> contacts)
{
List<string> values = new List<string>();
string query = null;
int i = 0;
foreach (var contact in contacts)
{
i++;
query += "(@firstName" + i + ", @lastName" + i + ")";
c.Parameters.AddWithValue("@firstName" + i, contact.first_name);
c.Parameters.AddWithValue("@lastName" + i, contact.last_name);

if(i < contacts.Count)
query += ",";
}

return query
}

你可以看到一个relevant thread here !。我一定错过了一些微不足道的事情,但这对你来说是微不足道的。你当然知道 contacts 没有元素时会发生什么。我没有看到更多的边缘案例。顺便说一句,请注意,根据 mysql 的最大允许数据包大小,您可以添加多少此类参数是有限制的。您可以更改它,或者注意不要超过该限制。干杯! :)

关于c# - 如何在不使用存储过程的情况下使用 C# 中的 MySQLCommand 创建安全查询以在 MySQL 中执行批量插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com