C# 当我单击update按钮更新SQL C中的数据库值时,所有行都受相同值的影响
下面是我的更新按钮点击事件代码C# 当我单击update按钮更新SQL C中的数据库值时,所有行都受相同值的影响,c#,sql,visual-studio-2010,C#,Sql,Visual Studio 2010,下面是我的更新按钮点击事件代码 { try { con = new SqlConnection(cs.ConDB); con.Open(); string cb = "Update tblFees set Salutation= '" + cmbSalutation.Text + "' , Name= '" + tbName.Text + "',Sex = '" + cmbSex.Text + "', Date =
{
try
{
con = new SqlConnection(cs.ConDB);
con.Open();
string cb = "Update tblFees set Salutation= '" + cmbSalutation.Text + "' , Name= '" + tbName.Text + "',Sex = '" + cmbSex.Text + "', Date ='" + Date.Text + "',Fees_Amount='" + cmbFeesAmount.Text + "',Fees_Status='" + radioButton1.Checked + "'";
cmd = new SqlCommand(cb);
cmd.Connection = con;
cmd.ExecuteReader();
con.Close();
MessageBox.Show("Successfully updated", "Record", MessageBoxButtons.OK, MessageBoxIcon.Information);
btnUpdate.Enabled = false;
btnSave.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try
{
con = new SqlConnection(cs.ConDB);
con.Open();
cmd = new SqlCommand("SELECT * From tblFees", con);
SqlDataAdapter myDA = new SqlDataAdapter(cmd);
DataSet myDataSet = new DataSet();
myDA.Fill(myDataSet, "tblFees");
dataGridView1.DataSource = myDataSet.Tables["tblFees"].DefaultView;
con.Close();
}catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);}`
请解决我的问题,我是编程界的新手
任何帮助都将不胜感激
您应该使用where条件指定行 例如,您可以修改查询,如下所示。我假设cboUser是一个组合框,您可以在其中选择特定的用户,以便仅为所选用户更新数据
SqlConnection con = new SqlConnection();
con.Open();
string cb = "Update [tblFees] set Salutation=@Salutation, Name=@Name,Sex =@Sex where tblFeesPK=@pk'";
SqlCommand cmd = new SqlCommand(cb, con);
cmd.Parameters.AddWithValue("@Salutation", cmbSalutation.Text);
cmd.Parameters.AddWithValue("@Name", tbName.Text);
cmd.Parameters.AddWithValue("@Sex", cmbSex.Text);
cmd.Parameters.AddWithValue("@pk", cboUser.SelectedValue);
cmd.ExecuteNonQuery();
如果您想根据名称更新详细信息,则意味着:您可以提供名称
在何处条件下。但这不是一个正确的方法。因此,请使用primary
keysince名称可能有重复的值
您需要将语句更改为:
string cb = "Update tblFees set Salutation= '" + cmbSalutation.Text + "' , Name= '" + tbName.Text + "',Sex = '" + cmbSex.Text + "', Date ='" + Date.Text + "',Fees_Amount='" + cmbFeesAmount.Text + "',Fees_Status='" + radioButton1.Checked + "' where Name= '" + tbName.Text + "'";
您需要在其中添加Name='+tbName.Text+'
现在,它将更新名称匹配的行
正如un lucky所说,你应该使用参数化查询你应该使用where conditionGirl指定行,告诉我们你想要实现什么?你想根据名称更新表吗?你应该真正使用参数化查询,串接字符串可能会允许SQL注入攻击。更多信息,请看这个答案:不幸运的先生,请给我一些例子,我是编程的初学者…哦,上帝。。。!这为注射开辟了广阔的道路我知道她需要以自己的方式解决问题!哥们,她问的是她不想更新所有的记录。她没有说过任何不同的方法。我直截了当地回答她:多亏了联合国的幸运儿和瓦卡尔·艾哈迈德,我将尝试这个,,,,:但某些问题不应该直截了当地回答,因为它们表明解决问题的方法根本是错误的。请参见Alex Papadimoulis的幽默例子。