none
两个DataTable,对比不相同的数据加入新的Table RRS feed

  • 问题

  • 数据图
    http://hi.csdn.net/attachment/201105/31/9921700_13068144121iZB.jpg
    DataTable table1 = Session["PNRbookTable"] as DataTable; //数据库数据
          DataTable table2 = Session["ImportTable"] as DataTable; //导入数据
    
          DataTable NewTable = new DataTable();
          DataColumn PNR = new DataColumn("PNR", typeof(string));
          DataColumn PassengerName = new DataColumn("PassengerName", typeof(string));
          DataColumn TicketNumber = new DataColumn("TicketNumber", typeof(string));
          DataColumn Salesprice = new DataColumn("Salesprice", typeof(float));
    
          NewTable.Columns.Add(PNR);
          NewTable.Columns.Add(PassengerName);
          NewTable.Columns.Add(TicketNumber);
          NewTable.Columns.Add(Salesprice);
    
          for (int i = 0; i < table1.Rows.Count; i++) //数据库数据每一行对导入数据进行比对
          {
            for (int y = 0; y < table1.Rows.Count; y++)
            {
              if (table1.Rows[i]["PNR"].ToString() != table2.Rows[y]["PNR"].ToString())
              {
                DataRow row = NewTable.NewRow();
                row = table1.Rows[i];
                NewTable.Rows.Add(row.ItemArray);
              }
            }
            for (int y = 0; y < table2.Rows.Count; y++)
            {
              if (table1.Rows[i]["PNR"].ToString() != table2.Rows[y]["PNR"].ToString())
              {
                DataRow row = NewTable.NewRow();
                row = table2.Rows[i];
                NewTable.Rows.Add(row.ItemArray);
              }
            }
          }
    http://hi.csdn.net/attachment/201105/31/9921700_13068143963QNo.jpg
    两个table结构相同,但是数量可能不同进行排除,根据数据库表一行数据依次对导入数据的每一行遍历,并将不同的内容添加到新的table里面
    但是每次到第二个for循环table2的Row会变成5 多了一个null值,按理说是4,,不清楚那一列null值是为何存在的,所以每次找到不同的时候,执行add添加的时候会报错(数组大于表中列)。有没有好的解决办法进行对比呢?
    2011年5月31日 8:12

答案

  • 您好,

    根据你的需求,你是说你想获取两个DataTable中的不相同的记录, 然后把他们放进一个新的DataTable里面嘛(不包含相同的记录)?

    如果是这样的话, 这里有个例子你可以参考下。他能够这场运行:

    DataTable table1 = new DataTable();
          table1.Columns.Add("Id", typeof(int));
          table1.Columns.Add("Name", typeof(String));
          table1.Rows.Add(1, "John");
          table1.Rows.Add(2, "Tom");
          table1.Rows.Add(5, "Helen");
    
          DataTable table2 = new DataTable();
          table2.Columns.Add("Id", typeof(int));
          table2.Columns.Add("Name", typeof(String));
          table2.Rows.Add(2, "Tom");
          table2.Rows.Add(4, "Peter");
          table2.Rows.Add(5, "Helen");
    
          DataTable newTable = new DataTable();
          newTable.Columns.Add("Id", typeof(int));
          newTable.Columns.Add("Name", typeof(String));
          foreach (DataRow row in table1.Rows)
          {
            DataRow[] rows = table2.Select("Id=" + row[0].ToString() + " AND Name='" + row[1].ToString() + "'");
            if (rows.Length == 0)
            {
              newTable.Rows.Add(int.Parse(row[0].ToString()),row[1].ToString());
            }
          }
    
          foreach (DataRow row in table2.Rows)
          {
            DataRow[] rows = table1.Select("Id=" + row[0].ToString() + " AND Name='" + row[1].ToString() + "'");
            if (rows.Length == 0)
            {
              newTable.Rows.Add(int.Parse(row[0].ToString()), row[1].ToString());
            }
          }

    分别从table1和table2中检索出不行同的记录然后加到newTable中。试试上面的代码。


    Vin Jin [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Aspen VJ 2011年6月8日 8:31
    2011年6月2日 2:25

全部回复

  • http://blog.csdn.net/q107770540/archive/2011/03/16/6252339.aspx

     

    虽然在XXXX论坛已回复过你的问题了


    Best Regards,
    If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".
    2011年5月31日 9:43
  • - - 这个世界太小了
    2011年6月1日 2:59
  • http://blog.csdn.net/q107770540/archive/2011/03/16/6252339.aspx

     

    虽然在XXXX论坛已回复过你的问题了


    Best Regards,
    If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".
    但是查询出来的结果不是我想要的,我对比两张表相同的排除,参照表是数据库表,如果导入的数据跟数据库数据一样····NONONO , 应该是如果相同就更改状态或者排除,只要不相等就显示出来 
    2011年6月1日 3:06
  • 您好,

    根据你的需求,你是说你想获取两个DataTable中的不相同的记录, 然后把他们放进一个新的DataTable里面嘛(不包含相同的记录)?

    如果是这样的话, 这里有个例子你可以参考下。他能够这场运行:

    DataTable table1 = new DataTable();
          table1.Columns.Add("Id", typeof(int));
          table1.Columns.Add("Name", typeof(String));
          table1.Rows.Add(1, "John");
          table1.Rows.Add(2, "Tom");
          table1.Rows.Add(5, "Helen");
    
          DataTable table2 = new DataTable();
          table2.Columns.Add("Id", typeof(int));
          table2.Columns.Add("Name", typeof(String));
          table2.Rows.Add(2, "Tom");
          table2.Rows.Add(4, "Peter");
          table2.Rows.Add(5, "Helen");
    
          DataTable newTable = new DataTable();
          newTable.Columns.Add("Id", typeof(int));
          newTable.Columns.Add("Name", typeof(String));
          foreach (DataRow row in table1.Rows)
          {
            DataRow[] rows = table2.Select("Id=" + row[0].ToString() + " AND Name='" + row[1].ToString() + "'");
            if (rows.Length == 0)
            {
              newTable.Rows.Add(int.Parse(row[0].ToString()),row[1].ToString());
            }
          }
    
          foreach (DataRow row in table2.Rows)
          {
            DataRow[] rows = table1.Select("Id=" + row[0].ToString() + " AND Name='" + row[1].ToString() + "'");
            if (rows.Length == 0)
            {
              newTable.Rows.Add(int.Parse(row[0].ToString()), row[1].ToString());
            }
          }

    分别从table1和table2中检索出不行同的记录然后加到newTable中。试试上面的代码。


    Vin Jin [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Aspen VJ 2011年6月8日 8:31
    2011年6月2日 2:25