以下代码有效,我收到消息框说明产品已更新,但数据库中未进行任何更改。
这是从另一个在同一个数据库中工作的方法复制和粘贴的,并且该方法工作正常。
private void btnProductSave_Click(object sender, EventArgs e)
{
if (txtProductName.Text != "")
{
var confirmResult = MessageBox.Show("Are you sure you want to save changes to this product?", "Confirm Save", MessageBoxButtons.YesNo);
if (confirmResult == DialogResult.Yes)
{
SqlConnection con = null;
con = new SqlConnection(ConfigurationManager.ConnectionStrings["PVAdmin.Properties.Settings.PricerConnectionString"].ConnectionString);
string sql2 = "UPDATE Products SET productName = @productName WHERE productID = @productID";
SqlCommand myCommand2 = new SqlCommand(sql2, con);
myCommand2.Parameters.AddWithValue("@productName", txtProductName.Text);
myCommand2.Parameters.AddWithValue("@productID", lblProductID.Text);
con.Open();
myCommand2.ExecuteNonQuery();
con.Close();
MessageBox.Show("Product saved.");
this.LoadProduct((int)cboProductSelect.SelectedValue);
}
else
{
MessageBox.Show("No changes were saved.");
}
}
}
答案 0 :(得分:1)
之前我已经看过这个,最终结果是sql引擎似乎自己更新了。由于你的@parm与列相同,所以sql说跟我一起更新。
要修复,请尝试轻微重命名参数,例如
UPDATE Products SET productName = @pProductName WHERE productID = @pPproductID";
myCommand2.Parameters.AddWithValue("@pProductName", txtProductName.Text);
myCommand2.Parameters.AddWithValue("@pProductID", lblProductID.Text);
这样,SQL没有列" pProductName"并且实际上将转到参数...同样使用" pProductID"。非常微妙,但可能正是你遇到的。此外,您要连接到哪个数据库。不同的引擎使用不同的令牌字符进行参数传递..."?"," @",":"正如我所知道的那样......