2010-07-26 36 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