C#executenonquery不更新数据库

时间:2014-08-30 19:26:18

标签: c# sql-server ado.net

以下代码有效,我收到消息框说明产品已更新,但数据库中未进行任何更改。

这是从另一个在同一个数据库中工作的方法复制和粘贴的,并且该方法工作正常。

    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.");
            }
        }
    }

1 个答案:

答案 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"。非常微妙,但可能正是你遇到的。此外,您要连接到哪个数据库。不同的引擎使用不同的令牌字符进行参数传递..."?"," @",":"正如我所知道的那样......