说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何合并两个dataset

编辑:说三道四文库 发布时间:2017-12-16 09:18
HTML文档下载 WORD文档下载 PDF文档下载
用什么方法可以把获取的两个dataset的数据合成一个表?
只是简单的把第二个表的数据加在第一个后面就行了
Dataset.Merge(Dataset1)
用Merge方法就可以了。
将此 DataSet 与指定的 DataSet 合并。

[Visual Basic]
<Serializable>
Overloads Public Sub Merge( _
   ByVal dataSet As DataSet _
)
[C#]
[Serializable]
public void Merge(
   DataSet dataSet
);
[C++]
[Serializable]
public: void Merge(
   DataSet* dataSet
);
[JScript]
public
   Serializable
function Merge(
   dataSet : DataSet
);
参数
dataSet 
其数据和架构将被合并的 DataSet。 
异常
异常类型 条件 
ConstraintException 无法启用一个或多个约束。 
ArgumentNullException dataSet 为空引用(Visual Basic 中为 Nothing)。 

备注
Merge 方法用于合并架构大致相似的两个 DataSet 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataSet。

通常在一系列过程的末尾调用 Merge 方法,这些过程涉及验证更改、消除错误、使用更改更新数据源并最后刷新现有的 DataSet。

在客户端应用程序上,通常有这样一个按钮,用户可以单击它来收集已更改的数据并对其进行验证,然后将其发送回中间层组件。在这种情况下,将首先调用 GetChanges 方法。该方法返回另一个为验证和合并而优化的 DataSet。第二个 DataSet 对象只包含已更改的 DataTable 和 DataRow 对象,结果产生初始 DataSet 的子集。该子集通常较小,因此可以更有效率地传递回中间层组件。然后,中间层组件将通过存储过程使用更改更新初始数据源。然后,中间层可以发送回一个新的 DataSet,其中包含数据源中的初始数据和最新数据(通过再次运行初始查询);或者它可以发送回包含从数据源对其进行的所有更改的子集。(例如,如果数据源自动创建唯一主键值,则可以将这些值传播回客户端应用程序。)在哪一种情况下都可以使用 Merge 方法将返回的 DataSet 合并回客户端应用程序的初始 DataSet。

为了便于解释 Merge 方法,我们使用“目标”(target) 表示当前的 DataSet,使用“源”(source) 表示第二个(参数)DataSet。如此命名目标 DataSet 是因为它是操作(合并)针对的对象。第二个 DataSet 被称为“源”是因为它包含的信息不更改,而是被合并到当前的 DataSet 中。

当调用 Merge 方法时,由于架构可能已更改,因此对两个 DataSet 对象的架构进行比较。例如,在企业对企业的情况下,可能已经通过自动过程将新列添加到 XML 架构中。如果源 DataSet 包含目标中缺少的架构元素(已添加的 DataColumn 对象),则可以通过将 missingSchemaAction 参数设置为 MissingSchemaAction.Add 将该架构元素添加到目标中。在这种情况下,合并的 DataSet 将包含已添加的架构和数据。

合并架构之后合并数据。

将新的源 DataSet 合并到目标中时,任何 DataRowState 值为 Unchanged、Modified 或 Deleted 的源行都与具有相同主键值的目标行匹配。DataRowState 值为 New 的源行同包含与新源行相同的主键值的新目标行匹配。

合并过程中将禁用约束。如果在合并结束时无法启用任何约束,则会在禁用约束的同时生成 ConstraintException 并保留合并的数据。这种情况下,EnforceConstraints 属性将设置为 false,并且所有无效行都会标记为出错。在试图将 EnforceConstraints 属性重置为 true 之前,必须消除这些错误。

示例
[C#] 
private void DemonstrateMerge() {
   // Create a DataSet with one table, two columns, and three rows.
   DataSet ds = new DataSet("myDataSet");
   DataTable t = new DataTable("Items");
   DataColumn c1 = new DataColumn("id", Type.GetType("System.Int32"));
   c1.AutoIncrement=true;
   DataColumn c2 = new DataColumn("Item", Type.GetType("System.Int32"));
   // DataColumn array to set primary key.
   DataColumn[] keyCol= new DataColumn[1];
   DataRow r;
   // Create variable for temporary DataSet. 
   DataSet xSet;
   // Add columns to table, and table to DataSet.   
   t.Columns.Add(c1);
   t.Columns.Add(c2);
   ds.Tables.Add(t);
   // Set primary key column.
   keyCol[0]= c1;
   t.PrimaryKey=keyCol;
   // Add ten rows.
   for(int i = 0; i <10;i++){
      r=t.NewRow();
      r["Item"]= i;
      t.Rows.Add(r);
   }
   // Accept changes.
   ds.AcceptChanges();
   PrintValues(ds, "Original values");
   // Change two row values.
   t.Rows[0]["Item"]= 50;
   t.Rows[1]["Item"]= 111;
   // Add one row.
   r=t.NewRow();
   r["Item"]=74;
   t.Rows.Add(r);
   // Insert code for error checking. Here we set one row in error.
   t.Rows[1].RowError= "over 100";
   PrintValues(ds, "Modified and New Values");
   // If the table has changes or errors, create a subset DataSet.
   if(ds.HasChanges(DataRowState.Modified | DataRowState.Added)& ds.HasErrors){
      // Use GetChanges to extract subset.
      xSet = ds.GetChanges(DataRowState.Modified|DataRowState.Added);
      PrintValues(xSet, "Subset values");
      // Insert code to reconcile errors. In this case, we'll reject changes.
      foreach(DataTable xTable in xSet.Tables){
         if (xTable.HasErrors){
            foreach(DataRow xRow in xTable.Rows){
            //Console.WriteLine(xRow["Item"]);
                 if((int)xRow["Item",DataRowVersion.Current ]> 100){
                  xRow.RejectChanges();
                  xRow.ClearErrors();
               }
            }
         }
      }
      PrintValues(xSet, "Reconciled subset values");
      // Merge changes back to first DataSet.
      ds.Merge(xSet);
      PrintValues(ds, "Merged Values");
   }
}

private void PrintValues(DataSet ds, string label){
   Console.WriteLine("\n" + label);
   foreach(DataTable t in ds.Tables){
      Console.WriteLine("TableName: " + t.TableName);
      foreach(DataRow r in t.Rows){
         foreach(DataColumn c in t.Columns){
            Console.Write("\t " + r[c] );
         }
         Console.WriteLine();
      }
   }
}
初创IT公司里开发者最容易犯的九种错误 还有多少开发者在为IE6做兼容性测试? 解读华三“新IT易之道”理念下的云计算和数据中心 回顾苹果2013:硬件几乎无突破 热衷收购 敏捷开发流程管理须参考的3个要素 微软潘正磊谈DevOps、Visual Studio 2013新功能、.NET未来 Jail Breaking之后,iOS 7的指纹识别还hold住么? “勇者前线”开发商Gumi获1900万美元融资 工信部发首批10张虚拟运营商牌照 开发者有哪些新机会 【PPT集萃】十位一线专家分享Spark现状与未来 谁主沉浮,亚马逊和思科角力DaaS市场 忆往昔峥嵘岁月稠——看苹果第一代iPhone的“风骚”往事 开源工具链“大牛”的经验分享:HelloGCC 2013精彩演讲回顾 20个超实用的JavaScript技巧及最佳实践 【开源专访】Linux Deepin:做更好用的Linux桌面系统 访Andy Jassy:感受亚马逊AWS生态观,思考国内外云计算差异 站到风口,最先飞起来的能将服务做到极致的IDC 苹果Siri再获一专利:可使用自然语音输入来搜索和标记图片 研发周报:Google抛弃C语言,采用Go语言重写Go编译器 取其精华 IE11里移除和新增的功能 大胆预测亚马逊即将推出的五大产品或服务 移动周报:GitHub章鱼猫中国之行 三星与LG的新动向:同样的物联网 ,不同的玩法 从Twitter到Tinder,看社交媒体在2013年的沉浮 一周消息树:有道周枫和他的“放养”团队、太极助手惹“非议” Netflix:使用大数据驱动商业决策 “中国杯”游戏极限开发大赛报道 回顾2013软件开发:JavaScript领风骚 京东“宙斯杯”创新应用大赛,百万奖金为“你”而等待 12306上的分布式内存数据技术GemFire Canalys:苹果、三星2014年仍统治平板市场 微软压力山大 新手求助?谁有较好的打印控件,或较好的解次方案? 申请数据结构-算法版主 初学者问题:MFC数据库(ACCESS) 那里可以找到interbase7的全部文档? 初学者问题:MFC建立数据库连接 请帮我编个简单的VC++程序,速回复,谢谢 初学者问题:MFC(FORMVIEW) 在System.DirectoryServices中如何通过NT用户组来取得组中的用户 高分:在命令提示符中登录mysql并执行包含多个mysql脚本 新手求助!!!! C#中的控制问题,大家来看看 急,哭,IIS下无法调试ASP。555,高手求你们帮帮我吧。 映射网络驱动器错误,我在公司机子上可以用,而在自家电脑上却报错,为什么?在线等待 sos pb巨大一个bug(还是我太菜了?),帮忙呀,兄弟们! 传值调用~,编译通过,可执行时出错 serialize(CArchive& ar)中怎样加载数组? 如何用VC从c代码得到汇编的代码? 如何在<form runat=server>...</form>内调用form外定义的变量? 如何鼠标指到单元格中,把单元格中的文字颜色改变 555~~~~ 100分求together for JBuilder 下载(不知为啥我的IE到borland上竟然无法打开那个弹出的下载页面) 如何定义listview控件中的指定文字的颜色? 我是初学jsp的虾米!请大家来帮我! 关于子窗体向父窗体取值问题 大脑极度混乱后的想法,请大家分析一下可行吗? 冲击波,怎么办? 您好 , 请教如何写一个服务程序 ? 高分求救-----怎么读出excel中的数据? 打印机套打发票问题。。。 怎样读取INI文件?按格式遍历数据 关于我看到的CSDN中的舞弊情况 谁有<<LINUX核心源代码>>的光盘. 爱情森林(原爱情毒药) 一 求有关于java的非GUI输入(windows命令窗口输入输出) 各位朋友多指教( DIRECTSHOW) 有水平的程序员看过来 怎样动态改变控件属性? yurenjf在CSDN上屡次舞弊 1.asp与标记语言wml和脚本语言wmlscript结合能够编写动态wap网站,请问asp.net能与标记语言wml和脚本语言wmlscript结合编写动态wap网站吗 如何从一个 dbexport.out 文件生成一个空数据库 ? 也就是如何用这个文件做参数来生成数据库 ? 谢谢 哪位朋友能提供给我xp pefessional的序列号?急 关于菜单函数的几个问题 请教Sqlserver 2000安装问题? 今天刚开始上汇编语言,老师提问是? 如何只恢复dump后数据库中的某个表,因为整个数据库太大? 请问我的电脑是怎么回事? 我问问题。你们来回答!如何把当前的年度赋值给一个editbox?我不会^_^ 问一下大家都用的什么模板? 请教一个挂fat分区的问题~ 登陆win2000的菜鸟问题 1.asp与标记语言wml和脚本语言wmlscript结合能够编写动态wap网站,请问asp.net能与标记语言wml和脚本语言wmlscript结合编写动态wap网站吗 初三物理电学:交通安全要注意路口这些红绿灯是-----联 他们所接的电路电压是----伏 红楼梦里迎春的绰号是什么、? 从镜子里看到死去的人,到底为什么,没有鬼不是吗? 红楼梦里描写迎春的句子是什么? 怎么把人物制作成金属雕像文字详细叙述 上皮细胞三个加号什么意思 三国故事,三个以上与撒过相关的成语或歇后语,三个以上与三国相关的成语或歇后语SORRY! 聊斋志异·张诚 译文.!要完全根据原文来翻译的,!以下是原文.豫人张氏者,其先齐人.明末齐大乱,妻为北兵掠去.张常客豫,遂家焉.娶于豫,生子讷.无何,妻卒,又娶继室牛氏,生子诚.牛氏悍甚,每嫉 燕赵门是什么?zxjh3000@163.com 《聊斋志异 张诚》的翻译 Nowadays a small number of women work in organizations affiliated to the armed forcesaffiliated 是作形容词修饰 organizations 两股台风同袭 日本气象台长获权发布紧美媒:美9月就业数据不佳为美联储政策英国乔治小王子教父母共7人 多为威廉劝诫移民\"回家\"广告被谴责 英政两股台风同袭 日本气象台长获权发布紧英国乔治小王子教父母共7人 多为威廉美军将撤离阿富汗 价值70亿美元军需分析称政府再停摆凸显美国政治新焦点劝诫移民“回家”广告遭批 英国取消推新加坡消费者花数万元上金融课讲师竟是印度一农民家园遭洪灾破坏 政府仅给一P2P现两极态势凸出 整顿元年大2016年中国在线旅游行业发展现状及图像识别,怎样守护网络直播的底线?|谷歌、李维斯联手打造黑科技牛仔外套,小规模企业IPO排队遭劝退,“年净利普京强势出手震惊西方:俄罗斯一举动帮贵州贵定县创新工作机制将矛盾化解在基贵州黎平:精细扶贫狠抓农民种养技能培U试驾 l 四缸行不行?保时捷 71贵州剑河:“九严禁”卡片打好换届纪律澳洲时装周,看看南半球的盆友都在背什异界美女召唤师精元珠蝶恋残花地狱代理人斩仙屠魔记苍冰烈焰习羽高飞魔法纹章吾逆天道菜鸟修真传位面商人肖强万平口旅游日照世帆赛基地旅游日照灯塔旅游奥林匹克水上公园旅游哈尔滨森林植物园旅游古运河旅游武昌起义纪念馆旅游洪山广场旅游黄崖水关旅游黄崖关旅游金矿博物馆旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘