gpt4 book ai didi

c# - 插入未提交到数据库

转载 作者:行者123 更新时间:2023-12-04 06:49:29 25 4
gpt4 key购买 nike

我在让我的 DataSet 工作时遇到了一些麻烦。

我在后台有一个 MDB 数据库,并从中创建了一个数据集。现在我创建了一个新方法,可以让我在表中创建一个新用户。

但是当我调用它时,什么也没有发生。没有异常(exception),没有错误,我什至得到“1”作为受影响的行数返回。但是当我查看数据库时,没有添加任何用户。

我有一种感觉,我想以某种方式告诉数据集我想操作数据库本身,而不仅仅是内部数据集……我怎样才能做到这一点?

// 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:尽管您不需要调用 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();
}

关于c# - 插入未提交到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3334632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com