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 動作しないと言うだけでなく、エラーの詳細を記載していただけると助かります... たとえば、DB サーバーに電源プラグが差し込まれているため、動作しないのですか? :D

于 2013-10-28T08:47:57.407 に答える
0

私はあなたのプロセスをよく理解していません。

INSERTクエリではこれを実行できないため、DataGridView に新しい行を追加しながらクエリを実行する必要がありUPDATEます。次に、どの行が追加されたかをコントロールで理解し、INSERTクエリを続行する必要があります。

このプロセスが完了したら、UPDATEクエリを使用して既存の行を更新できます。

@PaulZahra に同意します。SqlParameterオブジェクトを使用してクエリを改善してください。

于 2013-10-28T09:12:31.403 に答える