C# 插入未提交到数据库的文件

C# 插入未提交到数据库的文件,c#,ms-access,dataset,oledb,C#,Ms Access,Dataset,Oledb,我在使用数据集时遇到了一些问题 我在后台有一个MDB数据库,并用它创建了一个数据集。现在,我创建了一个新方法,可以在表中创建一个新用户 但当我叫它的时候,什么也没发生。没有异常,没有错误,甚至返回“1”作为受影响的行数。但是当我查看数据库时,没有添加任何用户 我有一种感觉,我无法告诉数据集我想操作数据库本身,而不仅仅是内部数据集。。。我怎样才能做到这一点 // DataSet1 uses the connection to the Database.mdb // Created by the D

我在使用数据集时遇到了一些问题

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

但当我叫它的时候,什么也没发生。没有异常,没有错误,甚至返回“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阅读以下内容:

更新:对于数据集,通常情况下(假设数据集已填充)会在代码中添加、编辑或删除行。这些行将具有相应的
RowState
,表示它们已添加、编辑、删除或未修改。在
.Update
过程中,相关联的表适配器,连同相关联的insert/Update/delete命令,将迭代这些行,并根据行的状态在给定行上执行该命令。当行被迭代时,调用
.AcceptChanges
,将行状态恢复为默认状态

如果在更新之前调用
AcceptChanges
,则不会发生任何事情。每行的
RowState
将丢失,因此
.Update
将不具有执行数据库更新所需的信息。如果您有用于在事务中包装所有内容的自定义代码,那么您需要确保提交事务

在您的示例中,您似乎暗示您正在使用表适配器,而不是数据集本身。我建议不要这样做-表适配器通常将方法放在您应该使用的数据集中的表上

更新2:代码在我看来还行,不过您不需要在适配器上调用
Insert
,也不需要在更新后调用
AcceptChanges
(后者是自动完成的)。这让我相信您的insert命令SQL中有一个bug—请尝试提取该命令使用的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();
    }

您可以发布一些DataSet insert方法的示例代码并调用它吗?其实没有什么可看的,我在Data.xsd的设计器中创建了该方法作为适配器的查询,并在事件时调用它。事件被触发,我检查了,并且值既不是空的也不是空的…如果内存可用,您需要调用
数据集
或相关适配器上的
更新
。这样做了,什么也没有发生…我做了完全相同的事情,它仍然没有保存任何更改。我可以完美地使用select方法,但无法更改任何内容……您是否使用了任何事务?你有例外吗?在尝试更新数据集之前是否调用.AcceptChanges?
INSERT-INTO`Users`(`name`,`password`)值(?,)
这是适配器的“INSERT”查询的SQL。如果我运行该数据库,添加值时不会遇到任何麻烦…好吧,我上传了一个显示错误的小TestApp。。。如果你能设法看一看,我将非常感激。。。好的,现在这真的是灰烬,但我发现了错误-这是我的愚蠢。我在项目资源管理器中检查了该文件,而不是编译时复制到调试目录的文件。在那里,一切都插得恰到好处。不过,谢谢你的帮助。。。