【问题标题】:Inserting Row into an Access 2003 DB using TableAdapter使用 TableAdapter 将行插入 Access 2003 DB
【发布时间】:2009-12-24 18:31:24
【问题描述】:

我是使用 TableAdapters 的新手,我不确定发生了什么。本质上,我正在尝试使用生成的数据集将数据从一个数据库导出到具有不同架构的另一个数据库。当我单步执行代码时,就填充目标数据库的行而言,一切似乎都运行良好。但是,当我尝试将一行添加到目标数据库时,该行似乎没有被插入。你们有什么想法吗?我已将添加到项目集中的数据库设置为不复制到输出目录……所以我在网上看到的建议似乎不起作用。

        OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\database.mdb;");

        SomeTableAdapter tableAdapter = new SomeTableAdapter();
        tableAdapter.Connection = oleDbConnection;
        tableAdapter.Connection.Open();

        SomeDataSet.SomeDataTable dataTable = tableAdapter.GetData();
        SomeDataSet.SomeDataRow dataRow = null;

        // Do some checks on the existing rows

        // Creation of new row is necessary
        if (dataRow == null)
            dataRow = dataTable.NewSomeRow();

            // Populate row fields

            dataTable.AddSomeRow(dataRow);
            dataTable.AcceptChanges();
        }
        else
        {
            // Update exiting row
        }

        tableAdapter.Update(dataTable);
        tableAdapter.Connection.Close();

【问题讨论】:

    标签: c# ms-access tableadapter


    【解决方案1】:

    调用 AcceptChanges() 是在自取其辱。它将对数据集的所有修改标记为“已提交”,因此下一次更新会忽略它们。

    您通常不应该直接调用 AcceptChanges,除非在高级场景中。

    【讨论】:

    • 感谢您的提示。我弄清楚了真正导致问题的原因。我做了一个愚蠢的疏忽,忘记填写必填字段。不过,谢谢。
    • 等一下,您毕竟在使用 AcceptChanges 并且它有效吗?如果是这样的话,我一定一直在做错事......
    • 我删除了 AcceptChanges 并且它起作用了。但是,是的,我刚刚发现您是对的,AcceptChanges 不允许写入数据。我实际上尝试在我的代码中没有 AcceptChanges,但它仍然不起作用,那是因为我没有填写必填字段。
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多