【问题标题】:DataTabe_RowDeleting, database not being updatedDataTabe_RowDeleting,数据库未更新
【发布时间】:2016-08-20 08:12:38
【问题描述】:

我的 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 的代码如下:

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

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

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

【问题讨论】:

  • 您是否曾经在您的表适配器上调用Update()
  • 是的,我已经用该代码更新了我的帖子
  • 在 tableadapter 上使用Update() 尝试,而不是通过 tableAdapterManager。
  • 不,不幸的是,这仍然不起作用。注释掉 tableadaptermanager 行并添加pROCFixedIncomeTradesSelectTableAdapter.Update(aAMOpsDBDataSet);,行为是一样的
  • 你有没有试过全程跟踪dataRow的RowState?在删除之前,在事件之后,在 tableadapter 更新之前。

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


【解决方案1】:

我仍然很困惑为什么我的其他代码没有按我想要的方式工作,但是我删除了我正在使用的事件处理程序,现在我正在对表适配器的 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;
    }
}

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2017-08-06
    • 2021-06-22
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多