2013-04-24 200 views
0

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

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的更改值。然而,更新返回0,并且数据库不会更改。

我在DataSetDesigner后面的代码中进行了验证,并且AFE_all表中定义了一条Update语句。

我哪里错了?或者,我错过了什么更多的步骤?

+0

忘了提 - 我已经证实,直接SQL更新语句会改变数据库,使用定义的数据集时,我提供的凭据。 (虽然我不确定如何验证这些是什么......) – 2013-04-24 21:24:31

回答

0

您需要删除此行

drAFE.AcceptChanges(); 

的的AcceptChanges()方法“变化” DataRow中以不变的状态,所以当你调用Update没有行保存。

From MSDN

当你调用的数据集AcceptChanges的,任何DataRow对象仍然 在编辑模式下成功地结束自己的编辑。每个DataRow的RowState属性 也会更改;新增及修改行成为不变, 和删除的行被删除

+0

“我已经尝试过,没有...... AcceptChanges” - 对不起,不是这样。 – 2013-04-24 21:18:01

+0

EndEdit()调用后属性drAFE.RowState的值是什么?它应该是'修改的' – Steve 2013-04-24 21:22:47

+0

史蒂夫 - 它执行'drAFE.EndEdit'后显示为Modified。 – 2013-04-25 16:16:17