建议用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;希望对你有用。
用for循环,分别比较2个表里不同的项
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()) {
union
select * from table2intersect select * from table1
(select * from table1 except select * from table2)
union
(select * from table2 except select * from table1)
在关键字 'except' 附近有语法错误。
是怎没回事?
/// 聯接兩個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遷出不同的
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;希望对你有用。
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())
{
} }
}
是这样比么,如果这样比,我要获取不同的信息怎么获取。