数据集更改未在SQL Server数据库中更新

时间:2013-04-24 19:32:53

标签: c# sql-server dataset

我通过Designer创建了一个数据集,我能够很好地检索数据。在对其他数据进行一些更新后,我需要更改原始行中的状态。我已经搜索了StackOverflow和MSDN,我想我已经尝试了所有建议 - 没有运气。

AFEDataSetTableAdapters.AFE_allTableAdapter taAFEAll = new AFEDataSetTableAdapters.AFE_allTableAdapter();
AFEDataSet.AFE_allDataTable dtAFEAll = new AFEDataSet.AFE_allDataTable();
taAFEAll.Fill(dtAFEAll, sAFENumber);
if (dtAFEAll.Count != 1)
{
    // error condition - should only ever be one row
}
DataRow drAFE = dtAFEAll.Rows[0];

// ......如果一切顺利......

if (...successful...)
{
    drAFE.BeginEdit();
    drAFE["AFEStatus"] = "Published";
    drAFE.EndEdit();
    try
    {
        drAFE.AcceptChanges();
        int iTemp = taAFEAll.Update(dsAFE.AFE_all);
    }
    catch (Exception ex)
    {
        sMessage = ex.Message.ToString();
    }
}

我在没有BeginEdit,EndEdit,AcceptChanges的情况下尝试过它;没变。调用.Update方法时,我可以看到(在调试中)drAFE的ItemArray显示AFEStatus的更改值。但是,更新返回零,数据库不会更改。

我在DataSetDesigner后面的代码中验证了,AFE_all表定义了一个Update语句。

我哪里出错了?或者,我错过了哪一步?

1 个答案:

答案 0 :(得分:0)

您需要删除此行

 drAFE.AcceptChanges();

AcceptChanges()方法将DataRow的状态“更改”为Unchanged,因此当您调用Update时,没有要保存的行。

From MSDN

  

当您在DataSet上调用AcceptChanges时,任何DataRow对象仍然存在   在编辑模式下,他们的编辑成功完成。的RowState属性   每个DataRow也会发生变化;添加和修改的行变为不变,   并删除已删除的行