c# - 更新查询 C# SQL Server
问题描述
单击 EditAll 按钮时会引发异常。
private void editAll_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\DELL\source\repos\phoneBookwin\phoneBookwin\Database1.mdf;Integrated Security=True");
con.Open();
string value;
bool friendCheck = newFriends.Checked;
bool familyCheck = newFamily.Checked;
bool emergencyCheck = newEmergency.Checked;
bool collCheck = newColl.Checked;
if (friendCheck)
value = newFriends.Text;
else if (familyCheck)
value = newFamily.Text;
else if (emergencyCheck)
value = newEmergency.Text;
else if (collCheck)
value = newColl.Text;
else
value = "";
SqlCommand cmd = new SqlCommand("update Contacts set Name='"+newName.Text+"' Contacts='"+newNumber.Text+"' Email='"+newEmail.Text+"' Group='"+value+"' where Name='"+changeName.Text+"')", con);
cmd.ExecuteNonQuery();
this.Hide();
Form1 save = new Form1();
save.ShowDialog();
con.Close();
}
抛出的异常是
联系人附近的语法不正确
解决方案
但是,您的 SQL 看起来无效;这可能是件好事,因为现在这是一个巨大的安全漏洞——你必须在 SQL 中使用参数,否则你的字符串连接方法会遇到问题,包括:
- 安全性,请参阅“SQL 注入”
- 正确性,请参见“Peter O'Toole”之类的名称
- 正确性,在不同的客户端区域设置格式(尤其是日期和数字)
- 服务器性能(查询计划缓存)
参数代码很乏味,但像“Dapper”这样的工具让它变得轻松:
// see "using" here - we need to Dispose connections!
using var con = new SqlConnection(...);
// ...
// (the following is an extension method added by Dapper)
con.Execute(@"
update Contacts
set Name = @newName, Contacts = @newNumber,
Email = @newEmail, Group = @newGroup
where Name = @changeName", new {
newName = newName.Text,
newNumber = newNumber.Text,
newEmail = newEmail.Text,
newGroup = value,
changeName = changeName.Text
});
另请注意,名称不是唯一的,不应(单独)用作谓词。
推荐阅读
- microsoft-graph-api - 创建技能熟练度失败并出现错误“ErrorAccessDeniedForRole”
- c# - Exchange Web 服务将邮件保存为草稿集 DateTimeSent
- c++ - 有没有更简单的方法来“汇集”函数调用?
- python - 在已定位的数据帧上使用 loc
- c# - 如何设置 2D Colliders 和 Rigibody2D?
- html - 我如何隐藏脚本标签中的随机数值
- javascript - 无法使用 lodash 和 vueJS 对数组进行排序
- sql - 在postgresql中有条件地删除部分行
- android - 无法从日期获取数据 SQLite
- sql - Springboot findByDate Mysql