-1

这是我的功能。

private void btnUpdate_Click(object sender, EventArgs e)
    {
        try
        {
            con.Open();
            cmd = new SqlCommand("update myEXPENSES set Detail= '" + txtDetail.Text 
                + "',Price='" + txtPrice.Text + "' 
                where Detail='" + txtDetail.Text + "'", con);
            cmd.ExecuteNonQuery();
            MessageBox.Show("Data has been updated");
            con.Close();
            displayData();
        }
        catch (Exception)
        {

        }
    }
    
4

1 回答 1

0

您的 SQL 语句也可能存在问题。您的SetandWhere子句放在一起没有意义,因为您正在将字段设置为您已经知道的相同值。——吴约翰

就像John Wu在这里所说的那样,您的 SQLSetWhere子句正在发生冲突。

您现在使用 Set 和 Where 子句所做的事情是首先查找Detail值与文本框中的内容匹配的行,txtDetail然后将详细信息值更改为txtDetail文本框中的内容,因此最终结果是您没有实际上改变任何东西。例如,如果我将字符串“good”放在文本框中,那么它将查找详细信息值为“good”的行,然后尝试将值更改为“good”

不要为您的 SET 和 WHERE 子句使用相同的值,如果您使用另一个文本框来将值更改为,它可能会容易得多。

            try
        {

            using (SqlConnection con = new SqlConnection())
            {
                con.ConnectionString = ini;
                con.Open();

                SqlCommand cmd = new SqlCommand("update myEXPENSES set Detail= '" + txtChange.Text + "', Price='" + txtPrice.Text + "' where Detail='" + txtDetail.Text + "'", con); 
                cmd.ExecuteNonQuery();
                MessageBox.Show("Data has been updated");
            }
        }
        catch (Exception es)
        {
            MessageBox.Show(es.Message);
        }

Value将txtChange是另一个文本框,您可以在其中添加用户可以添加他们想要将值更改为的txtDetail值,同时txtDetail用于查找要更改的内容

还要确保永远不要让你的 catch 块空着。try-catch 语句对您来说比将 catch 块留空更好,因为如果抛出异常,您将不知道,它会留下更多关于哪里出了问题的问题。

于 2021-05-23T14:24:52.500 回答