gpt4 book ai didi

c# - SQL 命令中的字符串插值

转载 作者:行者123 更新时间:2023-11-30 19:52:45 28 4
gpt4 key购买 nike

有没有更简单的方法在下面的插入 SQL 命令中使用 namephone 变量?

String Interpolation是一种方法,但我不知道如何实现。

String name = textBox1.Text;
String phone = textBox2.Text;

var query = "insert into Customer_info(Customer_Name,Customer_Phone) " +
"values('" + name + "','" + phone + "');";
SqlCommand com = new SqlCommand(query,con);

try {
con.Open();
com.ExecuteNonQuery();
con.Close();
}

catch (Exception Ex) {
con.Close();
}

最佳答案

您真正应该做的是使用参数化查询,因此您的查询将如下所示:

var query = "insert into Customer_info(Customer_Name,Customer_Phone)" +
"values(@name, @phone);";

然后您将使用 SQLCommand 对象将参数传递给查询:

using (var command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@name", name);
command.Parameters.AddWithValue("@phone", phone);

command.ExecuteNonQuery();
}

这样做的原因是它避免了 SQL 注入(inject)(这是 OWASP Top 10 之一)的风险。考虑一下您当前的查询,如果传入的 name 包含一些 SQL,例如,如果它包含:

'; DROP TABLE [Customer_info]; --

这意味着您构造的 SQL(如果 phone 为空)将如下所示:

insert into Customer_info(Customer_Name,Customer_Phone) values ('';
DROP TABLE [Customer_Info];
-- ','');

这很可能导致您的 Customer_Info 表被删除,如果该代码连接到 SQL 的用户有足够的权限这样做的话。

关于c# - SQL 命令中的字符串插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088517/

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