如何使用c#更新数据库中的表?

时间:2016-07-26 18:02:50

标签: c# sql

我的数据库中有一个名为“Members”的表。

在表单中,我有一些LabelsTextBoxes,一个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();

2 个答案:

答案 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;但是它们可能非常破坏性。

一些有用的资源