我已经在这个问题上停留了两个小时,非常感谢您的帮助。

我正在尝试执行的操作:使用OleDb更新2003 MS Access数据库。
当我执行代码时会发生什么:没有错误消息,但是数据库根本没有更新。受影响的0行。
编程语言:C#

额外的信息:

(1)var_workid是一个int,并且是表的主键。
(2)f2_sub和f2_field是组合框。
(3)f2_date是一个DateTimePicker。
(4)f2_details,f2_pacq,f2_daily,f2_area均为文本框。
(5)我的连接有效,我可以毫无问题地执行诸如SELECT ... FROM ... WHERE之类的语句。
(6).NET2.0

在MS Access中。
work_id,account_code,field_id,pacquiao,每日,区域都是数字。
详细信息是文本。
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();
    }

最佳答案

我认为OleDbCommand不支持这样的参数(OleDbCommand.Parameters Property):


  当CommandType设置为Text时,OLE DB .NET Provider不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。

10-08 14:05