插入不承诺数据库
我有一些麻烦让我的数据集工作。插入不承诺数据库
我在后台有一个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"...
没有太多了解你的代码,尝试如何从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();
}
我做了完全相同的事情,它仍然不保存任何更改。我可以完美地使用select方法,但不能更改任何内容...... – 2010-07-27 07:59:22
您的DataSet是否具有插入命令集?您可以在设计器中看到这些命令。 – 2010-07-27 09:19:23
是的,它有插入,更新,删除,一切。即使我改变他们的执行模式来直接(我直接在数据库上理解的),没有保存... – 2010-07-27 09:42:31
你能后的数据集插入方法的一些示例代码和你打电话了吗? – 2010-07-26 12:12:43
那么没有什么可看的,我在Data.xsd的设计器中创建了该方法作为适配器的查询并在事件中调用它。事件被解雇了,我检查了,值不是空的,也不为空... – 2010-07-26 12:15:42
如果内存服务,你需要在'DataSet'或关联的适配器上调用'Update'。 – 2010-07-26 12:18:00