以前就在想,怎么样做两个DataSet的比较。
看了网上的大部分解决方案都是遍历比较。
这样确实是最方便最直接的方法.
但是数据量如果很大呢了,这个方法还可以用吗?
或者说还敢用吗?
Dataset里有10张表,每张表10万条数据,每条数据50个字段。
打个比方而已,汉语的魅力就在于吹牛(不不不,是夸张,是夸张)
不幸中的万幸,其中只有一个表的一条数据的一个字段不相同。
这个遍历你敢做吗?
每个表,每条据,每个字段。
这个循环就是10*100000*50
循环5000万次就为一个错误?
最不幸的是,完全一样,这5000万次不就白循环了。
想想你浪费的电,我们要创造和谐低碳社会。
废话不说了。
这个方法也是无意中联想到的。
用MD5来加密两个DataSet,得到数字签名。
比较数字签名就是了。
现在网上下载个网络游戏都给你提供数字签名,就是为了让你判断,你下载来的东西有没有被修改过。
那这个方法我就拿来借鉴一把好了。
以下是代码
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Text
Imports System.IO
Imports System.Security.Cryptography
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Public Class DatasetValueEquals
Public Shared Function ValueEquals(ByVal objA As DataSet, ByVal objB As DataSet) As Boolean
Dim mdA As String = toMD5(objA)
Dim mdB As String = toMD5(objB)
If mdA.Equals(mdB) Then
Return True
End If
Return False
End Function
Public Shared Function toMD5(ByVal ds As DataSet) As String
Dim reMD5 As String = ""
Dim memStream As System.IO.MemoryStream = New System.IO.MemoryStream()
Dim brFormatter As IFormatter = New BinaryFormatter()
ds.RemotingFormat = SerializationFormat.Binary
brFormatter.Serialize(memStream, ds)
memStream.Close()
memStream.Dispose()
Dim dataToHash As Byte() = memStream.ToArray()
Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
Dim hashvalue As Byte() = md5.ComputeHash(dataToHash)
md5.Clear()
reMD5 = Convert.ToBase64String(hashvalue)
dataToHash = Nothing
dataToHash = Nothing
Return reMD5
End Function
End Class
代码我就不解释了。很简单,相信大家一看就懂
无非是将DataSet编程byte配列,然后加密。
得到数字签名并且比较而已。
我测试时可以的比较的,接下来我也会继续测试。
也希望有兴趣的人,也一起测试测试。
当然了,再扩展一下,把函数的入口不定义成DataSet
定义成宽泛的Object,那么什么DataTable,DataRow都是可以比较的了。
绝对原创,转载请注明出处
分享到:
相关推荐
用MD5的方法比较两个DataSet是否完全相同 用MD5加密后,得出两个DataSet的数字签名 用数字签名比较是否相同
2个Dataset或者2个DataTable比较是否存在不同
dataset導入到excel
、可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法。 、处理分级数据 、缓存更改 、XML的完整性:DataSet对象和XML文档几乎是可互换的。 、创建DataSet对象: 、查看调用SqlDataAdapter....
dorado5的Dataset说明,word文档
DataSet是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合。DataSet的功能:浏览、排序、搜索、过滤、处理分级数据、缓存...DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作.....
DataSet应用
【ASP.NET编程知识】合并两个DataSet的数据内容的方法.docx
将数据从DataSet写入XML文件,将数据从DataSet写入XML文件,将数据从DataSet写入XML文件,将数据从DataSet写入XML文件。
C# 两个datatable中的数据快速比较返回交集 并集或差集 网上的例子。但没有实例下载。新人有点难明白。对初学者还是有点难。完整源码。让新人学习。
本事例详细介绍了一个向一个DATASET中添加多个DATATABLE的例子,用户可以根据名称,取出在DATASET中不同的DATATABLE。
从源库源表中取出数据到dataset,然后存到数据结构完全相同的目的表中。
1、创建DataSet对象:...通常不必刻意去创建ForeignkeyConstraints,因为当在DataSet的两个DataTable对象之间创建关系时会创建一个。 ③、用SqlDataAdapter.Fill模式来检索模式信息 5、编写代码创建DataTable对象
.xls文件转DataSet类 把一个execl文件转换成DataSet的类
dataset system concept 课件
在我使用这个方法开发程序的时候我发现使用DataSet和DataAdapter对象更新关系数据的方法有问题。如果你仅仅更新一个DataTable,那么为DataAdapter创建代码就没多大问题,但是如果你使用多于一个表,那些表之间有...
DataSet转换为Excel
wcf开发以二进制字节流的方式传输dataset
DataSet转化为List的通用方法,可自动转换类型