我的数据库中有一个名为“Members”的表。
在表单中,我有一些Labels
,TextBoxes
,一个DataGridView
和一些按钮。
当我点击DataGridView
中的一行时,整个数据会正确显示在相应的TextBox
中。
我添加了一个“更新”按钮 - 点击后我希望数据库表信息立即更新。
我在“更新”按钮点击事件上编写了以下代码。但它不断显示我的错误。请帮忙。我非常需要解决方案。
string Query = "UPDATE Members SET MemberID='" + MemberIDTextBox.Text + "'|| Name='" + NameTextBox.Text + "'|| Gender='" + GenderComboBox.Text + "'|| Address='" + AddressTextBox.Text + "'|| NID='" + NationalIDTextBox.Text + "'|| DOB='" + DOBTimePicker.Text + "'|| BloodGroup='" + BloodGroupTextBox.Text + "'|| Height='" + HeightTextBox.Text + "'|| Weight='" + WeightTextBox.Text + "'|| ChestSize='" + ChestSizeTextBox.Text + "'|| MusclesSize='" + MusclesSizeTextBox.Text + "'|| AbsPack='" + AbsPackTextBox.Text + "'|| Profession='" + ProfessionTextBox.Text + "'|| Contact='" + ContactTextBox.Text + "' WHERE MemberID='" + MemberIDTextBox.Text + "'";
SqlCommand Command = new SqlCommand(Query, Connection);
Command.ExecuteNonQuery();
答案 0 :(得分:2)
使用参数化查询:
SqlCommand cmd = new SqlCommand("update Members set Name=@Name, Gender=@Gender, Address=@Address, NID=@NID, DOB=@DOB, BloodGroup=@BloodGroup, Height=@Height, Weight=@Weight, ChestSize=@ChestSize, MusclesSizes=@MusclesSizes, AbsPack=@AbsPack, Profession=@Profession, Contact=@Contact" + " where MemberID=@MemberID", Connection);
cmd.Parameters.AddWithValue("@MemberID", MemberIDTextBox.Text);
cmd.Parameters.AddWithValue("@Name", NameTextBox.Text);
// ...
//Keep adding parameters
cmd.ExecuteNonQuery();
答案 1 :(得分:1)
解决方案: 将双管道(||
)字符更改为逗号(,
)
像这样:
string Query = "UPDATE Members SET MemberID='" + MemberIDTextBox.Text + "', Name='" + NameTextBox.Text + "', Gender='" + GenderComboBox.Text + "', Address='" + AddressTextBox.Text + "', NID='" + NationalIDTextBox.Text + "', DOB='" + DOBTimePicker.Text + "', BloodGroup='" + BloodGroupTextBox.Text + "', Height='" + HeightTextBox.Text + "', Weight='" + WeightTextBox.Text + "', ChestSize='" + ChestSizeTextBox.Text + "', MusclesSize='" + MusclesSizeTextBox.Text + "', AbsPack='" + AbsPackTextBox.Text + "', Profession='" + ProfessionTextBox.Text + "', Contact='" + ContactTextBox.Text + "' WHERE MemberID='" + MemberIDTextBox.Text + "'";
但是你应该真的考虑参数化查询。对于当前实施的SQL注入攻击,您只是 ASKING 。
如何使用参数化查询?
StackOverflow上已有well-explained answer,它提供了如何在代码中使用参数化查询的很好示例。
什么是SQL注入?
这是一段SQL代码基本上通过简单的字符串连接公开 - 主要来自用户输入(文本字段等),就像你的OP一样。
如果是恶意"查询"输入到所述字段中,潜在的注入器可能会导致严重的问题,并导致大量损坏,访问/编辑数据库中他们并不意味着等等。
当其他开发人员将他们的代码暴露给SQL注入时,这不仅是世界上大多数程序员的宠物仇恨,而且这是一个可以(并且已经)破坏了业务的现实问题。 / p>
SQL注入攻击实际上是盲目的#34;但是它们可能非常破坏性。
一些有用的资源
C-Sharp Corner's article为您提供了更深入的描述 SQL注入是什么以及如何防止它
观看Computerphile's video关于如何(非常)轻松运行SQL 对暴露给它的代码的注入攻击