0

我有一个表单,其中包含一个用于添加 DataGridView 行的按钮和另一个用于删除所选行的按钮。我正在使用此代码保存:

    private void SaveReq2()
    {
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            this.mysql.sa.InsertCommand.CommandText = "INSERT INTO molaak_det(MAXID,MALKID,AKARTYPE,AKARADDRESS) VALUES ('" + this.dataGridView1.Rows[i].Cells[2].Value + "','" + txtID.Text + "','" + this.dataGridView1.Rows[i].Cells[0].Value + "','" + this.dataGridView1.Rows[i].Cells[1].Value + "')";
            mysql.sa.InsertCommand.ExecuteNonQuery();
        }
}

保存过程效果很好,但是当我想使用查询进行更新时,我只更新当前行。如果我插入一个新行然后我必须更新,代码会将这个新行保存在数据库中。这是我的UPDATE查询:

    private void UpdateReq2()
    {
        for (int i = 0; i < dataGridView1.Rows.Count; i++)
        {
            mysql.sa.UpdateCommand.CommandText = string.Format(" UPDATE molaak_det SET  MALKID='{1}',AKARTYPE='{2}',AKARADDRESS='{3}' where MAXID='{0}'", this.dataGridView1.Rows[i].Cells[2].Value, txtID.Text, this.dataGridView1.Rows[i].Cells[0].Value, this.dataGridView1.Rows[i].Cells[1].Value);
            mysql.sa.UpdateCommand.ExecuteNonQuery();
        }
    }

拜托,我需要帮助才能写好UPDATE查询。谢谢。

4

2 回答 2

1

我怀疑您的更新命令正在尝试错误地更新数据类型...首先它非常不安全,您至少应该参数化 sql...

阅读本教程/示例以了解如何操作,它非常简单,必须比您正在做的更安全且类型更安全。http://www.dotnetperls.com/sqlparameter

PS 如果您可以提供任何错误的详细信息,它会有所帮助,而不仅仅是说它不起作用……例如,数据库服务器上的电源插头是不是这样,这就是它不起作用的原因吗?:D

于 2013-10-28T08:47:57.407 回答
0

我不太明白你的过程。

您应该在向 DataGridView 添加新行的同时执行INSERT查询,因为您不能对UPDATE查询执行此操作。然后,您必须在控制范围内了解已添加哪些行并继续INSERT查询。

此过程完成后,您可以使用查询更新现有行UPDATE

我同意@PaulZahra,使用SqlParameter对象改进您的查询。

于 2013-10-28T09:12:31.403 回答