DataSet.GetChanges - 将更新的记录保存在与源表不同的表中

发布于 2024-09-04 05:37:38 字数 397 浏览 5 评论 0原文

我正在对包含来自名为 Test_1 的 SQL 表的数据的数据集进行操作,然后使用 DataSet.GetChanges(DataRowState.Modified) 函数获取更新的记录。然后,我尝试使用以下语句将包含更新记录的数据集保存在与源表不同的表上(该表名称为 Test 并且具有与 Test_1 相同的结构): sqlDataAdapter.Update(changesDataSet,"测试");

我收到以下错误:更新无法找到 TableMapping['Test'] 或 DataTable 'Test'

我是 ado.net 的新手,甚至不知道它是否可能。欢迎任何建议。

只是提供一些上下文。ETL 作业正在将数据导入到临时表中,其结构与原始表相同,但带有 _jobid 后缀,然后规则引擎在更新原始表之前进行验证。

I'm doing operation on a dataset containing data from a sql table named Test_1 and then get the updated records using the DataSet.GetChanges(DataRowState.Modified) function. Then i try to save the dataset containing the updated records on a different table than the source one (the table is names Test and has the same structure as Test_1) using the following statement:
sqlDataAdapter.Update(changesDataSet,"Test");

I'm getting the following error : Update unable to find TableMapping['Test'] or DataTable 'Test'

I'm new to ado.net and don't even know if it"s something possible. Any advice is welcome.

Just to provide a bit of context. ETL jobs are importing data in temp table with same structure as the original but with _jobid suffix. Right after a rule engine is doing validation before updating the original table.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

亚希 2024-09-11 05:37:38

为什么不在表上创建一个 更新触发器会插入到另一个表中吗?

why don't you create an update trigger on the table instead that will insert into the other table?

零度° 2024-09-11 05:37:38

如果 test 和 test_1 包含完全相等,则此方法有效:

  DataSet1 ds = new DataSet1();
            var da = new DataSet1TableAdapters.DepositTableAdapter();
            var da1 = new DataSet1TableAdapters.Deposit_1TableAdapter();
            da.Fill(ds.Deposit);

            foreach (DataSet1.DepositRow row in ds.Deposit.Rows)
            {
                if (row.ID == 3)
                {
                    row.Amount++;
                }
                foreach (var c in row.ItemArray)
                {
                    Console.Write(c);

                }
                Console.WriteLine("");
            }

            Console.WriteLine(ds.Deposit.GetChanges(System.Data.DataRowState.Modified).Rows);


            var updateTable = new DataSet1.Deposit_1DataTable();

            foreach (DataSet1.DepositRow row in ds.Deposit.GetChanges(System.Data.DataRowState.Modified).Rows)
            {
                updateTable.ImportRow((System.Data.DataRow)row);

            }
            da1.Update(updateTable);

规则引擎使用 test_1 后每次都是空的吗?
test_1 和 test 中的行是否完全准确?

如果您回答我的问题,我希望我可以提供进一步的帮助。

if test and test_1 contain are totally equal, this works:

  DataSet1 ds = new DataSet1();
            var da = new DataSet1TableAdapters.DepositTableAdapter();
            var da1 = new DataSet1TableAdapters.Deposit_1TableAdapter();
            da.Fill(ds.Deposit);

            foreach (DataSet1.DepositRow row in ds.Deposit.Rows)
            {
                if (row.ID == 3)
                {
                    row.Amount++;
                }
                foreach (var c in row.ItemArray)
                {
                    Console.Write(c);

                }
                Console.WriteLine("");
            }

            Console.WriteLine(ds.Deposit.GetChanges(System.Data.DataRowState.Modified).Rows);


            var updateTable = new DataSet1.Deposit_1DataTable();

            foreach (DataSet1.DepositRow row in ds.Deposit.GetChanges(System.Data.DataRowState.Modified).Rows)
            {
                updateTable.ImportRow((System.Data.DataRow)row);

            }
            da1.Update(updateTable);

Is test_1 everytime empty after the rule engine worked with it?
Do test_1 and test have the totally exact rows in them?

I hope i can provide further help if you answear my questions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文