3

私はこの問題に数時間立ち往生しており、助けていただければ幸いです。

私がやろうとしていること:OleDbを使用して2003MSAccessデータベースを更新します。
コードを実行するとどうなりますか:エラーメッセージは表示されませんが、データベースはまったく更新されません。0行が影響を受けます。
プログラミング言語:C#

追加情報:

(1)var_workidはintであり、私のテーブルの主キーです。
(2)f2_subとf2_fieldはコンボボックスです。
(3)f2_dateはDateTimePickerです。
(4)f2_details、f2_pacq、f2_daily、f2_areaはすべてTextBoxです。
(5)接続が機能し、SELECT ... FROM...WHEREなどのステートメントを問題なく実行できます。(6).NET2.0

MSAccessで。
work_id、account_code、field_id、pacquiao、daily、areaはすべて数字です。
詳細はテキストです。
date_doneはDateTimeです

private void btn_update_Click(object sender, EventArgs e)
    {
        string update_query;
        OleDbCommand SQLCommand = new OleDbCommand();

        update_query = "UPDATE [work_done] SET [account_code]= @AccountCode, [field_id] = @FieldID, [details] = @Details, [pacquiao] = @Pacquiao,[daily] = @Daily, [date_done] = @DateDone, [area] = @Area WHERE [work_id] = @WorkID;";
        SQLCommand.CommandText = update_query;
        SQLCommand.Connection = database;

        //Parameters
        SQLCommand.Parameters.AddWithValue("@AccountCode", f2_sub.SelectedValue.ToString());
        SQLCommand.Parameters.AddWithValue("@FieldID", f2_field.SelectedValue.ToString());
        SQLCommand.Parameters.AddWithValue("@Details", f2_details.Text);
        SQLCommand.Parameters.AddWithValue("@Pacquiao", f2_pacq.Text);
        SQLCommand.Parameters.AddWithValue("@Daily", f2_daily.Text);
        SQLCommand.Parameters.AddWithValue("@DateDone", f2_date.Value.ToString());
        SQLCommand.Parameters.AddWithValue("@Area", f2_area.Text);
        SQLCommand.Parameters.AddWithValue("@WorkID", var_workid);

        SQLCommand.CommandText = update_query;
        SQLCommand.Connection = database;

        //string message = "";
        //for (int i = 0; i < SQLCommand.Parameters.Count; i++) 
        //{
        //    message += SQLCommand.Parameters[i].Value.ToString() + "\n";
        //}
        //MessageBox.Show(message);


        int response = SQLCommand.ExecuteNonQuery();

        MessageBox.Show(response + " Update successful!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.ParentForm.refresh();
        Close();
    }
4

1 に答える 1

2

OleDbCommand は次のようなパラメーターをサポートしていないと思います ( OleDbCommand.Parameters Property ):

CommandType が Text に設定されている場合、OLE DB .NET プロバイダーは、OleDbCommand によって呼び出される SQL ステートメントまたはストアド プロシージャにパラメーターを渡すための名前付きパラメーターをサポートしません。この場合、疑問符 (?) プレースホルダーを使用する必要があります。

于 2012-11-03T08:20:40.067 に答える