2010-07-26 37 views
1

我有一些麻煩讓我的數據集工作。插入不承諾數據庫

我在後臺有一個MDB數據庫,並創建了一個DataSet。現在我創建了一個新的方法,讓我在表中創建一個新用戶。

但是當我叫它時,什麼也沒有發生。沒有例外,沒有錯誤,我甚至將「1」返回爲受影響的行數。但是當我查看數據庫時,沒有用戶被添加。

我有一種感覺,我想以某種方式告訴DataSet我想操作數據庫本身,而不僅僅是內部DataSet ......我該如何實現這一目標?

// DataSet1 uses the connection to the Database.mdb 
// Created by the Designer 

// The Users table has 3 columns, id, name and password 

DataSet1 set = new DataSet1(); 
UsersTableAdapter adap = new UsersTableAdapter(); 
DataSet1.UsersRow row = set.Users.AddUsersRow("asd", "asd"); 
int count = adap.Insert("das", "das"); 
MessageBox.Show(row.RowState.ToString() + ": " + count.ToString()); 
count = adap.Update(set.Users); 
set.AcceptChanges(); 
MessageBox.Show(row.RowState.ToString() + ": " + count.ToString()); 

// The Messagebox shows: "Added: 1" 
// The second one: "Unchanged: 1" 

MessageBox.Show(set.Users.Rows.Count.ToString()); 

// Returns "2"... 
+0

你能後的數據集插入方法的一些示例代碼和你打電話了嗎? – 2010-07-26 12:12:43

+0

那麼沒有什麼可看的,我在Data.xsd的設計器中創建了該方法作爲適配器的查詢並在事件中調用它。事件被解僱了,我檢查了,值不是空的,也不爲空... – 2010-07-26 12:15:42

+0

如果內存服務,你需要在'DataSet'或關聯的適配器上調用'Update'。 – 2010-07-26 12:18:00

回答

2

沒有太多瞭解你的代碼,嘗試如何從MSDN閱讀本:

http://msdn.microsoft.com/en-us/library/ms233812(v=VS.80).aspx

更新:的數據集,通常會發生什麼(假設數據集有被填充)是行將被添加,編輯或刪除的代碼。這些行將有相應的RowState,表示它們已被添加,編輯,刪除或未修改。在.Update期間,關聯的表適配器(包含關聯的插入/更新/刪除命令)將迭代行並根據行的狀態在給定行上執行命令。當迭代行時,調用.AcceptChanges,將行狀態恢復爲默認值。

如果在更新之前調用AcceptChanges,則不會發生任何事情。每行的RowState將丟失,因此.Update將不具有執行數據庫更新所需的所需信息。如果您有自定義代碼將其全部封裝在一個事務中,那麼您需要確保提交事務。

在你的例子中,你似乎暗示你正在使用表適配器而不是數據集本身。我建議不要這樣做 - 表適配器通常將方法放在您應該使用的數據集的表中。

更新2:代碼看起來OK給我,雖然你並不需要調用Insert適配器上,或AcceptChanges更新後(後者是自動完成的)。這使我相信你的插入命令SQL有一個錯誤 - 嘗試提取命令使用的SQL,並根據數據庫手動運行它。

更新3:下面的代碼工作正常,我:

static void Main(string[] args) 
    { 
     db1DataSet set = new db1DataSet(); 
     set.Users.AddUsersRow("asd", "asd"); 

     foreach (DataRow row in set.Users.Rows) 
     { 
      object foo = row.RowState; // Confirm row state in debugger. 
     } 

     UsersTableAdapter adap = new UsersTableAdapter(); 
     adap.Update(set.Users); 

     Console.Read(); 
    } 
+0

我做了完全相同的事情,它仍然不保存任何更改。我可以完美地使用select方法,但不能更改任何內容...... – 2010-07-27 07:59:22

+0

您的DataSet是否具有插入命令集?您可以在設計器中看到這些命令。 – 2010-07-27 09:19:23

+0

是的,它有插入,更新,刪除,一切。即使我改變他們的執行模式來直接(我直接在數據庫上理解的),沒有保存... – 2010-07-27 09:42:31