datable的结构是一样的。

解决方案 »

  1.   

    select * from table1 intersect select * from table2
    union
    select * from table2intersect select * from table1
      

  2.   


    (select *  from table1 except select * from table2)
    union
    (select *  from table2 except select * from table1)
      

  3.   

    服务器: 消息 156,级别 15,状态 1,行 1
    在关键字 'except' 附近有语法错误。
    是怎没回事?
      

  4.   

    我的两个表不在同一个数据库上,而且还不是在同一台服务器上,我只能把数据读到内存的datatalbe中,但是我不知道怎么比较。
      

  5.   

        /// <summary>
        /// 聯接兩個DataTable
        /// </summary>
        /// <param name="dt1">FirstDataTable</param>
        /// <param name="dt2">SecondDateTable</param>
        /// <param name="ColuName1">the columnName in FirstDataTable that use in connection.Exp: comp,dept</param>
        /// <param name="ColuName2">the columnName in SecondDateTable that use in connection.Exp: comp,dept</param>
        /// <param name="Mark">true:SecondDT移除行(InnerJion);false:SecondDT不移除行(LeftJoin)</param>
        /// <param name="type"></param>
        /// <returns></returns>    
    public enum JoinType { LeftJoin, InnerJion };
        public static DataTable ConnectTwoTable(DataTable FirstDT, DataTable SecondDT, string ColuName1, string ColuName2, bool Mark, JoinType JType)
        {
            try
            {
                DataTable dt1 = FirstDT.Copy();
                DataTable dt2 = SecondDT.Copy();
                string[] Names1 = ColuName1.Trim().Split(',');
                string[] Names2 = ColuName2.Trim().Split(',');
                //確保ColuName1與ColuName2是不同的
                string dtmNow = DateTime.Now.ToString("yyyyMMddhhmmss");
                for (int i = 0; i < Names2.Length; i++)
                {
                    string Name1 = Names1[i].ToString().Trim();
                    Names1[i] = Name1;
                    string Name2 = Names2[i].ToString().Trim();
                    dt2.Columns[Name2].ColumnName = Name2 + dtmNow;
                    Names2[i] = Name2 + dtmNow;
                }
                int FirstColuNum = dt1.Columns.Count;
                dt1.BeginLoadData();
                foreach (DataColumn colu2 in dt2.Columns)
                {
                    if (dt1.Columns.Contains(colu2.ColumnName))
                        colu2.ColumnName += "_Second";//同名列加後綴"_Second"標示,已示區別.
                    dt1.Columns.Add(colu2.ColumnName, colu2.DataType);//不同名的列添加到dt1中.
                }
                int LastColuNum = dt1.Columns.Count;
                List<DataRow> list = new List<DataRow>();
                foreach (DataRow dt1Row in dt1.Rows)
                {
                    string strSelect = string.Empty;
                    for (int j = 0; j < Names2.Length; j++)
                    {
                        string conText = dt1Row[Names1[j].ToString()].ToString();
                        strSelect += Names2[j].ToString() + "='" + conText + "' and ";
                    }
                    strSelect = strSelect.Substring(0, strSelect.Length - 5);
                    DataRow[] dt2Rows = dt2.Select(strSelect);
                    if (dt2Rows.Length > 0)
                    {
                        foreach (DataRow dt2Row in dt2Rows)
                        {
                            for (int i = FirstColuNum; i < LastColuNum; i++)
                            {
                                dt1Row[i] = dt2Row[i - FirstColuNum];
                            }
                            if (Mark)
                                dt2.Rows.Remove(dt2Row);//移除已使用過的行
                        }
                    }
                    else
                    {
                        list.Add(dt1Row);
                    }
                }
                if (JType == JoinType.InnerJion)
                {
                    foreach (DataRow row in list)
                    {
                        dt1.Rows.Remove(row);
                    }
                }
                for (int k = 0; k < Names2.Length; k++)
                {
                    dt1.Columns.Remove(Names2[k].ToString());
                }
                dt1.EndLoadData();
                return dt1;
            }
            catch (Exception ex)
            {
                throw new Exception("the columnName is not in table" + ex.Message);
            }
        }
         合併後用dt.Select遷出不同的
      

  6.   

    我感觉楼上的有点麻烦了,先一用循环比较,如果不同的话,新生成一个datatable,,add进去就可以,最后只需要把新的datatable显示出来就可以了
      

  7.   

    建议用DataViewDataView dv=dataTable1.DefaultView;
    StringBuilder sb=new StringBuilder();
    int i=0;
    foreach(DataRow row in dataTable2.Rows)
    {     sb.Append(" columnName= '"+row.Columns["columnName"]+"'");
         if(i<dataTable2.Rows.Count)
            sb.Append(" and ");
         i++;
    }
    dv.RowFilter=sb.ToString();dataSource.DataSource=dv;希望对你有用。
      

  8.   

    用for循环,分别比较2个表里不同的项
      

  9.   


     for (int i = 0; i < clientDataTable.Rows.Count; i++)
                    {
                        for (int j = 0; i < centerDataTable.Rows.Count; j++)
                        {
                            if (clientDataTable.Rows[i][0].ToString() == centerDataTable.Rows[j][0].ToString())
                            {
                                
                            }                    }
                    }
    是这样比么,如果这样比,我要获取不同的信息怎么获取。