当DataSet中包含主/子表时,Update更新步骤

 (一) 序幕
              当DataSet中同时包含主/子表(主键表/外键表)时,有时候关系约束太严格:
              比如, 关系数据库完整性规则:
               1.实体完整性. 主键表中主键不准为空.  
               2.参照完整性. 外键表中外键的值必须与主键表中的主键对应. 
                     要么为空,要么为主键表中的一主键值.
               3.自定义完整性.  
              如果DataSet表中定义的多表关系约束太严密,直接用Update方法,将DataSet中多表一起提交时,有可能不满足完整性规则,会发生错误,原因:
            举个例子,设为两个表:
            CompanyMain(公司主表)和CompanySon(公司子表),CompanyMain(公司主表)主要存储一个公司的基本信息,CompanySon(公司子表),主要存储此公司的一些客户的信息.
            并且公司主表中的(ID)与子表中的(BelongID)建立关联,即主外键关系; 一个公司对应着多个客户,即ID:BelongID = 1
            : n关系.主表的ID为自动生成编号.
              那么:
               在新增公司界面,一起提交时,系统是不会遵守"数据库完整性规则"来更新到数据库的.如果它先更新子表,再更新主表有可能就会报错. 
            原因是主表的公司信息还没有插入到数据库中的表,也就没有生成公司编号: ID,则子表更新时就会没有对应的BelongID.这时如果设置了:
            "外键表中的外键不为null"完整性规则,就会引发异常.这只是一种出错的可能,还有更多的出错可能性,在分布式设计中更容易出现这样的错误.
              (二). 解决办法
              一般遵守以下几条规则,就会避免大量的出错机率.
              1规则.   在DataSet更新之前按 <表> 和 <表的RowState属性>进行拆分提交
              I.  按 <表> 进行拆分提交意思是说:
              对DataSet 中的表不是一起提交,而是一次提交一个表,进行多次提交
              II.按 <表的RowState属性>进行拆分提交意思是说:
              对DataSet中的单个表根据RowState属性,再进行拆分,对RowState相同的进行一次提交,也是提交多次
              2.规则.      
              在规则1基础上, 先更新状态为<新增> 和 <修改> 的,再更新<删除的>
              即: 先更新DataRowState 值为: Added和Modified的,再更新: Deleted的.
              3.规则
              在规则1和规则2基础上,如果DataRowState为Added和Modified,则先更新主表,后更新子表.
              在规则1和规则2基础上,如果DataRowState为Deleted,则先更新子表,后更新主表.
              (三) 归纳一下上面三条规则,如下:
              1.将DataSet中的表拆分,并根据RowState将各个表记录进行分组并存储在不同的数据集中
              //这里要存储在DataSet中,是因为: Update接受的是DataSet的参数,还有WebService只支持
              //DataSet,对其进行序列化操作
              代码示例:
              设待更新的数据集为: dsCompany(里面包括两个表,分别为主表和子表,并存储了数据,待更新)
              //dtCompanyMain存储公司主表信息,dtCompanySon存储公司子表信息
              DataTable dtCompanyMail = ds.Tables["dtCompanyMain"].Clone(); 
            //分离出主表数据并存储另一对象
              DataTable dtCompanySon  = ds.Talbes["dtCompanySon"].Clone(); 
            //分离出子表数据并存储另一对象
              DataSet dsAdded = new DataSet();            //存放主表 新增 的数据
              DataSet dsMidified = new DataSet();          //存储主表  编辑 的行记录
              DataSet dsDeleted = new DataSet();         //存储主表 删除 的行记录
              dsAdded = dtCompanyMain.GetChanges(DataRowState.Added);  
            //取得主表中新增的行记录集
              dsMidified = dtCompanyMain.GetChanges(DataRowState.Modified); 
            //取得主表中编辑的行记录集
              dsDeleted = dtCompanyMain.GetChanges(DataRowState.Deleted); 
            //取得主表中删除的行记录集             
              2.更新主表DataRowState状态为: Added和Modified的记录.
              SqlDataAdapter.Update(dsAdded,"dtCompanyMain");   //更新添加的记录集到数据库
              SqlDataAdapter.Update(dsModified,"dtCompanyMain");  
//更新修改的记录集到数据库
              3.更新子表DataRowState状态为: Added和Modified的记录
                .............  //代码省略,跟2主表更新类似
              4.更新子表DataRowState状态为: Deleted的记录.
                ............   // 代码省略,与下面5类似
              5.更新主表DataRowState状态为: Deleted的记录
              SqlDataAdapter.Update(dsDeleted,"dtCompanyMain");   //更新修改的记录集到数据库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python数据集是一个Python软件包,它提供了一个非常方便的方式来操作和管理数据集。它允许用户进行统计分析、数据可视化、建立机器学习模型、以及应用各种数据科学方法。Python数据集还提供了一个可扩展的API,可以快速轻松地处理各种数据类型,包括结构化数据、非结构化文本数据和图像数据等等。 Python数据要由三个核心组件组成:数据源、数据集和数据流。 数据源是指数据的来源或存储位置,可以是文件、数据库或者网络等。 数据集是Python数据集的核心概念,它是像表格、数据库、CSV文件等数据对象的抽象。Python数据集使用Pandas数据框架来处理和管理数据集。Pandas提供了许多功能,包括数据加载、查询、筛选、排序和合并等。 数据流代表数据的运动,也就是指数据是如何流经数据集的。Python数据集提供了很多内置方法,可以操作数据流,比如读取、过滤、聚合、转换等等。 使用Python数据集,就可以轻松的读取数据、处理数据、可视化数据、建立模型,是数据科学家和研究者的强有力工具。特别是在机器学习领域,Python数据集可以方便地进行数据处理和模型训练。同,Python数据集用户众多,社区非常活跃,有许多第三方包可以用于特定的数据处理需求。 ### 回答2: PythonDataset指的是一些数据的集合或者一个被组织好的数据结构。PythonDataset常用于机器学习、数据分析、处理大规模数据等领域。Dataset可以用来存储、处理和操作数据,非常方便实用。 Python有多种用于处理Dataset的库和工具,包括Numpy、Pandas、Scikit-learn等。其Pandas是最常用的一个库,它提供了DataFrame这个类,可以用来处理表格型数据。Pandas还提供了一些方便的工具,比如对缺失数据进行处理、数据合并、数据透视表等。 Scikit-learn是一个用于机器学习的库,也可以用来处理Dataset。Scikit-learn提供了一些标准的数据集用于练习和学习机器学习算法,还提供了一些用于特征工程的工具,如特征选择和特征缩放等。 除了这些库和工具外,Python还有一些专门用于处理特定类型数据的库,如NLTK用于自然语言处理、GenSim用于文本分析等。 另外,Python也有许多用于获取不同类型Dataset的库和工具,如爬虫库Scrapy、网络API工具Requests等,可以用来获取网络上的数据并进行处理。 总之,Python提供了丰富的Dataset处理工具和库,可以方便地获取、处理和操作各种类型的数据。 ### 回答3: Python dataset 是一种工具,用于从各种数据源(如 SQL 数据库、NoSQL 数据库以及 CSV 等)读取数据,并将其转换为 Python 数据结构。这使得我们可以在 Python 方便地对数据进行分析、处理和建模。 使用 Python dataset 要分为以下几个步骤: 1. 安装 Python dataset。可以使用 pip 命令来安装,使用前需要先导入: ```python import dataset ``` 2. 连接到数据源。我们可以使用 dataset.connect() 方法连接到不同的数据源: ```python # 连接到 SQLite 数据库 db = dataset.connect('sqlite:///mydatabase.db') # 连接到 MySQL 数据库 db = dataset.connect('mysql://user:password@localhost/mydatabase') # 连接到 PostgreSQL 数据库 db = dataset.connect('postgresql://user:password@localhost/mydatabase') ``` 3. 查询数据。使用 dataset 的方法可以方便、快速地查询数据,例如: ```python # 查询数据 table = db['mytable'] results = table.find(name='Alice') # 迭代结果并打印 for row in results: print(row['name'], row['age']) ``` 4. 插入、更新删除数据。通过 dataset 执行插入、更新删除操作非常简单: ```python # 插入数据 table = db['mytable'] table.insert({'name': 'Bob', 'age': 30}) # 更新数据 table = db['mytable'] table.update({'name': 'Bob'}, {'$set': {'age': 40}}) # 删除数据 table = db['mytable'] table.delete(name='Bob') ``` 总之,Python dataset 是一个兼容性强的数据处理工具,能够方便地处理各种类型的数据库,并提供了灵活、易于使用的 API。它是 Python 数据分析和建模必不可少的工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值