使用 TableAdapter 更新数据集中的两个相关表

在修改并验证了数据集中的数据后,可能需要将更新后的数据发回数据库。要将修改后的数据发送到数据库,需要调用
Update 方法。此适配器的 Update 方法将更新单个数据表并根据该表中每个数据行的rowstate执行正确的命(INSERT、UPDATE 或 DELETE)。

  1. try/catch 块中调用适配器的 Update 方法。
  2. 如果捕获到异常,则找到引发错误的数据行。
  3. 协调数据行中的问题(在可能的情况下以编程的方式进行,或者将无效的行显示给用户进行修改),然后重新尝试更新。
    Try
        Me.Validate()
        Me.CustomersBindingSource.EndEdit()
        Me.CustomersTableAdapter.Update(Me.NorthwindDataSet.Customers)
        MsgBox("Update successful")
    
    Catch ex As Exception
        MsgBox("Update failed")
    End Try

    使用 TableAdapter 更新数据集中的两个相关表

    当更新数据集中的相关表时,务必要以正确的顺序进行更新,以减小违反引用完整性约束的可能性。命令执行的顺序也将遵循数据集中 DataRowCollection 的索引的顺序。为了防止引发数据完整性错误,最佳的做法是按照下面的顺序更新数据库:

  1. 子表:删除记录。
  2. 父表:插入、更新和删除记录。
  3. 子表:插入和更新记录。
  4. 使用 TableAdapter 更新两个相关表

    1. 创建三个临时数据表以保存不同的记录。
    2. try/catch 块中为每个子行集调用 Update 方法。如果发生更新错误,则应分支出来并解决这些错误。
    3. 将更改提交到数据库。
    4. 处置临时数据表以释放资源。

      下面的示例显示如何用包含相关表的数据集更新数据源。

      Private Sub UpdateDB()
          Dim deletedChildRecords As NorthwindDataSet.OrdersDataTable = _
              CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
      
          Dim newChildRecords As NorthwindDataSet.OrdersDataTable = _
              CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
      
          Dim modifiedChildRecords As NorthwindDataSet.OrdersDataTable = _
              CType(NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
      
          Try
              If deletedChildRecords IsNot Nothing Then
                  OrdersTableAdapter.Update(deletedChildRecords)
              End If
      
              CustomersTableAdapter.Update(NorthwindDataSet.Customers)
      
              If newChildRecords IsNot Nothing Then
                  OrdersTableAdapter.Update(newChildRecords)
              End If
      
              If modifiedChildRecords IsNot Nothing Then
                  OrdersTableAdapter.Update(modifiedChildRecords)
              End If
      
              NorthwindDataSet.AcceptChanges()
      
          Catch ex As Exception
              MessageBox.Show("An error occurred during the update process")
              'Add code to handle error here.
      
          Finally
              If deletedChildRecords IsNot Nothing Then
                  deletedChildRecords.Dispose()
              End If
      
              If newChildRecords IsNot Nothing Then
                  newChildRecords.Dispose()
              End If
      
              If modifiedChildRecords IsNot Nothing Then
                  modifiedChildRecords.Dispose()
              End If
      
          End Try
      End Sub

时间: 2024-12-28 14:41:55

使用 TableAdapter 更新数据集中的两个相关表的相关文章

mybatis学习之路----批量更新数据两种方法效率对比

原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方式有两种, 一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 下面进行实现. 注意第一种方法要想成功,需要在db链接url后面带一个参数  &allowMultiQueries=true 即:  jdbc:mysql:

Django开发运维后台(二):建立模型与更新数据

上一篇文章我已经新建了一个SaAdmin的APP,现在开始在这APP下面来code 1.修改setting.py的数据库连接: DATABASES = {     'default': {         'ENGINE':'django.db.backends.mysql',         'NAME': 'QjshAdmin',         'USER': 'root',         'PASSWORD': 'lihuipeng',         'HOST': 'localho

网络请求怎么样和UI线程交互? Activity2怎么通知Activity1 更新数据

1.网络请求怎么样和UI线程交互? 目前我的做法是,建立线程池管理网络请求线程,通过添加task来新增网络请求.所有的网络操作通过统一的request来实现,网络返回结果通过回调onError和onSuccess来实现对结果的处理(涉及到ui部分用runOnUiThread or handler通知ui更新,工程上两种都有,主要看你喜欢,不过用handler请注意内存泄露问题...) 这种做法好处就是,线程池可以避免不断开启线程导致虚耗资源,同时可以做到管理线程,自定义任务执行的顺序.统一req

sqlite学习笔记10:C语言中使用sqlite之查询和更新数据

前面说到的 sqlite_exec() 中的第三个参数, SQLite 将为 sql 参数内执行的每个 SELECT 语句中处理的每个记录调用这个回调函数. 本节添加了两个函数,selectFromTable和updateTable. 实例程序如下: #include <stdio.h> #include <stdlib.h> #include "sqlite/sqlite3.h" #define DB_NANE "sqlite/test.db&quo

Java批量插入、更新数据

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有.今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库. 前台页面: <span style="font-size:14px;"><body class="main_body" scroll="no"> <div class="employee_gun_dong"> <form nam

MongoDB数组修改器更新数据

MongoDB数组修改器更新数据 2013-04-22 10:20:40      我来说两句    来源:姜志福 的BLOG    收藏  我要投稿 MongoDB数组修改器更新数据 这里,我们将了解一下数组修改器.数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用.数组修改器,顾名思义,它是用来修改数组的,而不能用来修改整数或者字符串.数组修改器不多,就那么几个,但熟练掌握它后,将给我们带来非常方便的操作.下面,我们来了解一下: > db.us

DataGridView编辑后立即更新到数据库的两种方法

DataGridView控件是微软预先写好的一个显示数据的控件,功能非常强大,可以显示来自数据库表的数据和XML等其他来源的数据.最近在做一个迷你超市管理系统,要大量用到这个控件.所以花时间好好研究了下. 这是迷你超市管理系的库存数据DataGridView,用户一定会想如果能直接在DGV中修改数据就好了. 是的,这是一个很好的想法,这个功能微软早就帮我们想到了,现在可以使两种方法加以实现.下面就来介绍一下他们. 第一张方法:基于DataAdapter对象创建一个CommandBulider,用

SQL Server编程必知必会(插入/删除/更新数据,视图) -- (80-85 点总结)

------------------------插入数据------------------------- 80.1. 插入完整的行-- 各个列必须以他们在表定义中出现的次序填充INSERT INTO customersVALUES ('Pep E. LaPew','100 Main Street','LOS Angeles','CA','90046','USA',NULL,NULL) -- INSERT 语句的安全操作方法,指定列, INTO 关键字是可选的INSERT INTO custom

Windows Phone本地数据库(SQLCE):13、更新数据(翻译)

这是“windows phone mango本地数据库(sqlce)”系列短片文章的第十三篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知识点.我将谈谈在windows phone mango本地数据库里怎么更新数据. 更新数据到数据库是一个三个步骤的过程.首先,查询要被更新的对象,然后更改数据,最后调用SubmitChanges 方法保存这些更改到数据库. 注释:如果你绑定在DataContext里的对象到页面上的控件,根据用户的