`
syokouken
  • 浏览: 14309 次
  • 性别: Icon_minigender_1
  • 来自: 大阪
社区版块
存档分类
最新评论

用MD5的方式来比较两个DataSet是否完全相同

阅读更多

以前就在想,怎么样做两个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都是可以比较的了。

 

 

绝对原创,转载请注明出处

 

 

 

分享到:
评论
1 楼 y112102 2012-12-31  
我改成net的测试都是fasle啊 朋友

相关推荐

Global site tag (gtag.js) - Google Analytics