2011-11-17 26 views
0

我寫了一個簡單的測試來檢查我的dataAdapter代碼。我連接到SQL Server數據庫,填充一個數據表,連續更改一個值,然後調用da.Update(table)將這些更改發送回SQL Server。該表有一個主鍵。一點也不知道爲什麼,這是不工作...(見代碼)C#DataAdapter,DataTable - >不更新回SQL Server表

connectionToSQL = new SqlConnection(SQLConnString); 
connectionToSQL.Open(); 

var wktbl = new DataTable(); 

var cmd = new SqlCommand("SELECT * FROM TAGS$",connectionToSQL);     
var da = new SqlDataAdapter(cmd); 
var b = new SqlCommandBuilder(da); 
da.Fill(wktbl); 

wktbl.Rows[3][2] = "5"; 
wktbl.AcceptChanges(); 

da.Update(wktbl); 
+2

你不能這樣更新。在填充數據表中的值之後,您對數據表所做的任何更改純粹只涉及它。而且你又需要編寫一些查詢來進行類似的更新選擇。並調用ExecuteNonQuery()來執行更新。 –

+0

http://www.java2s.com/Code/CSharp/Database-ADO.net/UpdatetableusingSqlDataAdapter.htm – Thinhbk

+0

@skk:'SqlDataAdapter'自動構建UPDATE查詢,'da.Fill'應該使用它來更新數據庫。 @ user1051076這可能是'AcceptChanges'的調用,它打破了這一點,因爲它將所有的行狀態重置爲不變...... –

回答

4

就跳過調用AcceptChanges和代碼應該正常工作。它將所有行標記爲未修改,因此您的更新呼叫沒有任何可做的事情。

+0

我同意達米爾。執行更新後,您通常會調用AcceptChanges *。 –

+0

@MoeSisko:你根本不需要調用'AcceptChanges',因爲'Update'也是這樣。 –

+0

@ArjanEinbu:你說得對。感謝您的更正。 –

0

好的,我想擴大我的問題到我原來的努力...我從Excel電子表格選擇*到dt。我想要取這些值並更新SQL表。 (因爲從原始Excel電子表格手動導入到SQL,具有主鍵集,用戶更新Excel表,我需要更新SQL值)。調用更新。

connectionToSQL = new SqlConnection(SQLConnString); connectionToSQL.Open();

  var cmd = new SqlCommand("SELECT * FROM TAGS$",connectionToSQL);     
      var da = new SqlDataAdapter(cmd); 
      var b = new SqlCommandBuilder(da); 

      //dt.Rows[3][2] = "20"; 

      foreach (DataRow r in dt.Rows) 
      { 
       r.SetModified(); 
      } 

      da.Update(dt); 
+0

「我想把我的問題擴展到我原來的努力」。如果你想改變你的問題,你應該編輯你的問題或要求一個新的問題。您添加了答案,並且不會按照您的意願收到。 –

+0

好的,謝謝你幫助我。我會添加一個新的。 – cjjeeper

+0

很高興我能幫到你。我看到你添加了新的問題。你應該刪掉這個答案。 –