网站首页 > 书籍教程 > ASP教程 > 比较两个DataTable是否相等(网上流传的通病)

比较两个DataTable是否相等(网上流传的通病)

  • 作者:互联网
  • 时间:2010-02-01 16:14:01

我写这篇文章只是想告诉大家,网上流传最广的并不一定是正确的

我想要是Google搜一下,如何判断两个DataTable相等,出来的最多的是下面的方法

 

代码
   private bool  ValueEquals(DataTable objA,DataTable objB)
    {
        if(objA != null && objB != null)
        {
              if(ob***Rows.Count != ob***Rows.Count)
              {
                  return false;
              }

              if(ob***Columns.Count != ob***Columns.Count)
              {
                  return false;
              }
        }
      
   
        DataView dv = new DataView(objB);

        string keys = "";

        foreach(DataColumn col in  ob***Columns)
        {
               keys += ","+co***olumnName;
        }

     
        dv.Sort = ke***Substring(1);

       
        foreach(DataRow row in  ob***Rows)
        {
               if(ro***owState != Da***owState.Deleted)
               {
                   if(dv.Find(ro***temArray)<0)
                   {
                          return false;
                   }
               }
               else
               {
                   return false;
               }
        }

        return true;

    }

 

这个段代码的始作俑者已经无法考证了,但是却流传很多。

我不知道转载的人有没有去验证一下这个方法的正确性,还是只是转载.

这个方法其实是错的。

如果两个DataTable的行数一样,列数一样,但是第一行相同,第二行不相同,用上面的方法比较,返回的依然是True

 

写在这里是告诉广大(包括我在内),网上流传最多的不一定是正确的,也想对广大老鸟说一下,转载的时候请验证一下内容的正确性,我想这样不管是对自己,对别人都是有好处的吧。

第一次发,如果说的不对的,希望大家不要建议

也希望可以高手给出正确的、高效的,比较两个DataTable是否相等的方法

我是用的比较老土的方法

 

代码
public bool DataTableTheSame(DataTable Table1, DataTable Table2)
        {
            if (Table1 == null || Table2 == null)
            {
                return false;
            }
            if (Ta***1.Rows.Count != Ta***2.Rows.Count)
            {
                return false;
            }
            if (Ta***1.Columns.Count != Ta***2.Columns.Count)
            {
                return false;
            }
            for (int i = 0; i < Ta***1.Rows.Count; i++)
            {
                for (int j = 0; j < Ta***1.Columns.Count; j++)
                {
                    if (Ta***1.Rows[i][j].ToString() != Ta***2.Rows[i][j].ToString())
                    {
                        return false;
                    }
                }
            }
            return true;
        }