代码之家  ›  专栏  ›  技术社区  ›  F.P

插入未提交到数据库

  •  1
  • F.P  · 技术社区  · 15 年前

    我在后台有一个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"...
    
    1 回复  |  直到 12 年前
        1
  •  3
  •   Adam Houldsworth    15 年前

    由于不太了解您的代码,请尝试从MSDN阅读以下内容:

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

    对于数据集,通常情况下(假设数据集已填充)是在代码中添加、编辑或删除行。这些行将具有相应的 RowState 表示它们已添加、编辑、删除或未修改。在 .Update 相关联的表适配器,连同相关联的insert/update/delete命令,将迭代这些行,并根据行的状态对给定行执行命令。当行被迭代后, .AcceptChanges

    AcceptChanges 在更新之前,什么都不会发生。这个 行状态 .更新

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

    更新2: 代码在我看来没问题,不过你不需要打电话 Insert 接受更改 更新后(后者自动完成)。这让我相信insert命令SQL中有一个bug—请尝试提取该命令使用的SQL并针对数据库手动运行它。

    以下代码对我来说很好:

    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();
        }