1.合并DataTable
遇到的问题:
需要选择两个不同数据库的不同表中的记录重新组合成一个新的集合。最一开始想到的方法就是使用视图,但是问题在于表存在在不同的数据库中。所以就否定了使用视图的方法。后来想到既然数据库中实现起来有困难那么就试试使用c#代码实现,于是就想到将需要的两个表都取出来然后在代码中进行合并,实际上就是将数据库中视图做的工作换到了代码中。
解决方法:
将两个DataTable合并成为一个DataTable
取得两个DataTable某些列,按照某种选择条件重新组合成为一个新的DataTable
这个很类似于”select * from 表1,表2 where 表1.列名= 表2.列名”
示例代码
/// <summary>合并dt1和dt2的数据</summary>
/// <returns>获得合并之后的新DataTable---newTable</returns>
private static DataTable CombineTable ( DataTable dt1, DataTable dt2 )
{
//创建新的DataTable
DataTable newTable = new DataTable ( );
//为newTable添加新列
newTable.Columns.Add ( "StudentID", Type.GetType ( "System.String" ), " " );
newTable.Columns.Add ( "StudentCode", Type.GetType ( "System.String" ), " " );
newTable.Columns.Add ( "StudentName", Type.GetType ( "System.String" ), " " );
newTable.Columns.Add ( "Indexing", Type.GetType ( "System.Int64" ), " " );
newTable.Columns.Add ( "ClassID", Type.GetType ( "System.String" ), " " );
newTable.Columns.Add ( "ClassCode", Type.GetType ( "System.String" ), " " );
newTable.Columns.Add ( "ClassName", Type.GetType ( "System.String" ), " " );
newTable.Merge ( dt1 ); //将dt1合并到newTable
foreach (DataRow newrow in newTable.Rows) //遍历newTable全部列
{
foreach (DataRow dr2 in dt2.Rows) //遍历dt2全部列
{
if (newrow["StudentID"].ToString ( ) == dr2["StudentID"].ToString ( )) //当newTable的StudentID和dt2的StudentID相同时,执行下列操作
{
//将dtStudentExecutiveClassLink对应列的信息newTable对应列中
newrow["StudentCode"] = dr2["StudentCode"];
newrow["StudentName"] = dr2["StudentName"];
newrow["ClassID"] = dr2["ClassID"];
newrow["ClassCode"] = dr2["ClassCode"];
newrow["EClassName"] = dr2["ClassName"];
}
}
}
return newTable; //返回结果
}
当然还可以接着对获得的新DataTable进行处理,比如删除某些已经存在的列,使用的语句是remove(),添加某些新列使用Add()
2.取得DataTable中不重复的记录
遇到的问题
需要取得DataTable中不重复的记录插入到数据库中,
这个就类似于sql语句中的distinct关键字,可以保证所选的记录全部不重复。
解决方法
将DataTable放在DataView中,我觉得可以将它看成是类似于数据库中视图的概念---一个虚拟的DataTable,然后再使用ToTable方法选择出来不重复记录的列。
示例代码
/// <summary>
/// 选择不重复记录
/// </summary>
public DataTable getNewTable( DataTable dt)
{
//相当于一个视图,将一下满足条件的dtAddData选择出来
DataView dv = new DataView ( dtAddData );
//第一个参数:true:后面的列组成的一条记录不重复
//第二个参数:组成一条不重复记录的列名
DataTable dtSchoolYear = dv.ToTable ( true, "SchoolYear", "Semester", "CollegeID", "CollegeName", "TeacherID", "TeacherCode", "TeacherName", "CourseID", "CourseName" );
return dtSchoolYear;
}