DataTabe_RowDeleting,数据库未更新

时间:2016-04-26 13:10:23

标签: c# sql-server datatable ado.net dataset

我的tableadapter删除命令实际上是一个存储过程,它使用日期时间更新行,该行被删除"以及在另一列中执行删除的用户,因为我不想实际删除该行,只是将其标记为未包含在将来的选择中。我正在使用我的数据表的RowDeleting事件,如下所示,我没有收到任何错误,该行正在从绑定到我的数据表的datagridview中删除,尽管我的数据库表中的两列不是正在成功更新。我哪里错了?

private void PROCFixedIncomeTradesSelect_RowDeleting(object sender, DataRowChangeEventArgs e)
{
    AAMOpsDBDataSet.PROCFixedIncomeTradesSelectRow row = (AAMOpsDBDataSet.PROCFixedIncomeTradesSelectRow)e.Row;
    row.Deleted = DateTime.Now;
    row.DeletedBy = Environment.UserName;
}

用于将更改推送到db的代码I如下:

private void pROCFixedIncomeTradesSelectBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
    SaveData();
}

private void SaveData()
{
    this.Validate();
    pROCFixedIncomeTradesSelectBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(aAMOpsDBDataSet);
}

编辑,第2天,我仍然希望找到这个问题的答案,我可以测试的任何建议,以试图诊断问题?我确实测试了我的更新命令,更改了datagridview的一行中的值,然后单击了我的保存按钮,数值在数据库中成功更新。

1 个答案:

答案 0 :(得分:0)

我仍然感到困惑,为什么我的其他代码没有按照我想要的方式工作,但我删除了我正在使用的事件处理程序,现在正在对表适配器的RowUpdating事件进行更改。这段代码按我想要的方式工作。

private void Adapter_RowUpdating(object sender, System.Data.SqlClient.SqlRowUpdatingEventArgs e)
{
    if (e.StatementType == StatementType.Delete)
    {
        pROCFixedIncomeTradesSelectTableAdapter.Adapter.DeleteCommand.Parameters["@Deleted"].Value = DateTime.Now;
        pROCFixedIncomeTradesSelectTableAdapter.Adapter.DeleteCommand.Parameters["@DeletedBy"].Value = Environment.UserName;
    }
}