【问题标题】:sqlAdaptor.update does Add a new row and Update an existiong row, but doesnot delete the row in Databasesql Adapter.update 确实添加新行并更新现有行,但不删除数据库中的行
【发布时间】:2014-08-27 18:25:07
【问题描述】:

我在从 MSSQL 数据库获取数据的 Windows 应用程序中使用 datagridview。在网格中进行更改(例如编辑行和添加新行)后,我正在使用 sqlAdapter.update(dataset, tableName) 更新数据库。 编辑的行和新添加的行正确地存储在数据库中,

但如果我删除 datagrid 中的行并将其存储在DataTable 中,然后使用sqlAdapter.update(dataset, tableName). 进行更新,它不会更新数据库。

请注意:updatedDS 中的表格在点击以下代码之前具有更新的值。

public bool UpdateDBwithDataSet(DataSet updatedDS, string dsName)
    {
        try
        {
            Concheck();
            //sAdapter = new SqlDataAdapter(SqlQuery, con);

            CCDcmdBld = new SqlCommandBuilder(sAdapter);
            sAdapter.DeleteCommand = CCDcmdBld.GetDeleteCommand(true);
            sAdapter.UpdateCommand = CCDcmdBld.GetUpdateCommand(true);
            sAdapter.InsertCommand = CCDcmdBld.GetInsertCommand(true);

            if (sAdapter.Update(updatedDS, dsName) > 0)
                return true;
            else
                return false;
        }
        catch (Exception ex)
        {
            return false;
        }
        finally
        {
            if (con.State == ConnectionState.Open) { con.Close(); }
        }

    }

请告诉我这里出了什么问题。 (注意:它也不会抛出任何异常。)

【问题讨论】:

  • 如果在调用更新之前,出于调试目的,您插入了对DataTable deletedRows = updateDS.Tables[dsName].GetChanges(DataRowState.Deleted) 的调用,您是否获得了包含已删除行的表?

标签: c# sql


【解决方案1】:

我找到了答案:)

我实际上在做 dsWFSubItem.Tables[dtName].Rows.RemoveAt(selectedWorkflowRow);,改为我们需要如下操作dsWFSubItem.Tables[dtName].Rows[selectedWorkflowRow].Delete();强>。然后 sqlDataAdapter.Update 方法将其从数据库中删除。

【讨论】:

  • 如果你觉得它是正确的,任何人请点赞。 orelse 发布任何其他更好的选择(如果有)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多