2010-08-07 52 views
0

更新數據集後嘗試更新我的數據庫,但即使調用數據適配器的更新函數,底層數據庫也不會更改。我使用SqlCommandBuilder,它仍然不會更新。一旦我打開GUI,我可以提交和搜索數據集中的值,但是一旦關閉它然後重新運行它,所有更改都將消失。幫幫我?通過C#/ Visual Studio中的DataAdapters/datasets更新數據庫的問題

Code: 

     //in my form load event 
     con = new System.Data.SqlClient.SqlConnection(); 
     ds1 = new DataSet(); 
     ds2 = new DataSet(); 

     con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database1.mdf;Integrated Security=True;User Instance=True"; 

     con.Open(); 
     MessageBox.Show("Database Open."); 

     string sql = "SELECT * From tblPurchases"; 
     da = new System.Data.SqlClient.SqlDataAdapter(sql, con); 

     string cust = "SELECT * From tblCustomers"; 
     da2 = new System.Data.SqlClient.SqlDataAdapter(cust, con); 

     da.Fill(ds1, "Purchases"); 
     numOfRecords = ds1.Tables["Purchases"].Rows.Count; 

     da2.Fill(ds2, "Customers"); 
     numOfCustomers = ds2.Tables["Customers"].Rows.Count; 

     con.Close(); 
     MessageBox.Show("Database Closed."); 

    Code: 
      //in my submit button click event 

      System.Data.SqlClient.SqlCommandBuilder cb; 
      cb = new System.Data.SqlClient.SqlCommandBuilder(da); 

      System.Data.SqlClient.SqlCommandBuilder cb2; 
      cb2 = new System.Data.SqlClient.SqlCommandBuilder(da2); 

      DataRow dRow = ds1.Tables["Purchases"].NewRow(); 
      DataRow dRow2 = ds2.Tables["Customers"].NewRow(); 

      //dRow updating happens here 

      ds1.Tables["Purchases"].Rows.Add(dRow); 
      ds2.Tables["Customers"].Rows.Add(dRow2); 

      da.Update(ds1, "Purchases"); 
      da2.Update(ds2, "Customers"); 

就是這樣。沒有錯誤消息,只是即使這樣,底層數據庫也不會更新,更新只能達到數據集。

+1

歡迎來到StackOverflow!編輯您的問題以包含相關代碼和實際錯誤消息以幫助說明。 – 2010-08-07 05:56:32

+0

我已更新相關代碼的帖子。 – Icyie 2010-08-07 06:19:21

回答

0

SqlDataAdapter.Update()方法返回一個整數,其中成功更新的行數。考慮將該值加載到變量中以確定是否有任何行被報告爲已更新。

SqlCommandBuilder可能需要調用它的方法.GetUpdateCommand()GetUpdateCommandgets the automatically generated SqlCommand object required to perform updates on the database

cb.GetUpdateCommand(); 
cb2.GetUpdateCommand(); 

da.Update(ds1, "Purchases"); 
da2.Update(ds2, "Customers"); 

考慮對您的服務器運行SQL Server Profiler以確定由SqlCommand生成的TSQL語句。這對確定數據庫和語句是否如預期是非常有幫助的。

+0

我做了cb.GetUpdateCommand();它什麼也沒做。數據庫仍然爲空。我也返回了整數值,它返回1,這是正確的,但是當我檢查數據庫時,一切仍然是空的。這個問題困擾了我一個星期,並且很快提交了工作原型,所以我決定在這裏提問。 – Icyie 2010-08-07 07:10:08

+0

@Icyie:包含SQL事件探查器的更新答案。 – 2010-08-07 15:08:18

+0

我想我知道問題是什麼。連接的設置使我可以保存和更新數據庫的值,但每次關閉程序然後再次運行它時,它會刷新數據庫,以使所有最近的數據都丟失。我不知道如何解決它。 – Icyie 2010-08-10 08:00:51

0

所有你需要做的是改變

con.ConnectionString = 
`"Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database1.mdf; 
Integrated Security=True;User Instance=True"; 

即會在運行時生成到真實的,如改變|DataDirectory|的真實路徑。例如:c:\\blablablabla

相關問題