2013-04-24 150 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