合并动态生成的表思路:首先先动态生成一张表,循环遍历数据库中具有相同考试名称题型的答题记录表,再一一把查询出来的每一张表的答题记录合并到一张新生成的表中。
首先我们这是合并具有相同表结构的数据,所以比较简单一点,直接把数据拿过来就可以了。其次用到的是模糊搜索数据库中所有的表,模糊搜索一开始自己想的有点局限了就卡在这了,其实like'%+str+%'可以加字符串。
整体界面思路:
#region 根据课程和题型查询生成表名称
/// <summary>
/// 根据课程和题型查询生成表名称
/// </summary>
public void BindJoin()
{
//获取课程的Value值
DataTable dtCourse = new DataTable();
enCourseMap.CourseID = dropCourse.SelectedItem.Value.ToString().Trim();
dtCourse = CourseQuestion.SelectCourseMapByCourseID(enCourseMap);
string CourseName = Convert.ToString(dtCourse.Rows[0]["ExamCourseName"]);
//获取题型的Value值
enSystem.DictionaryName = dropQuestion.SelectedItem.ToString().Trim();
dt=Dictionary.Selectbyname(enSystem);
string QuestionType=Convert.ToString(dt.Rows[0]["DictionaryValue"]);
//string CollegeNo = "Join";
try
{
//创建表
//string tableName = teaGetTableName.GetTableNameRecord(CourseName, QuestionType, CollegeNo);
string likeName = teaGetTableName.GetTableNameAllRecord(CourseName, QuestionType);
map.Clear();//清空map表的所有数据;
map.Add("TableNameRecord", likeName);
map.Add("QuestionType", QuestionType);
QuestionManageBLL.QuestionContextBLL questionContextBll = new QuestionManageBLL.QuestionContextBLL(map);
questionContextBll.CreateQuestionRecord(map);
//合并数据的表名(大表)
//enArrange.JoinTables = likeName;
//模糊匹配的表名
enArrange.Other1 = likeName;
JoinRecord.QueryTables(enArrange);
//遍历表把内容添加到创建的表中
}
catch (Exception ex)
{
MessageBox.Show(this.Page,ex.Message);
}
}
#endregion
like模糊搜索:like中间可以加字符串
//查询出所要合并的表并
public DataTable QueryTables(ExamArrangeEntity model)
{
String str = "select name from sysobjects where type = 'U'and name like '%" + model.Other1 + "%'";
DataSet ds = new DataSet();
ds = DbHelperSQL.Query(str);
return ds.Tables[0];
}
合并表:
/// <summary>
/// 合并表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool JoinTables(ExamArrangeEntity model)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into " + model.Other1 + " Select StudentID,ExamID,QuestionID,ExamAnswer,CorrectAnswer,Fraction,Timestamp,IsCheck,Teacher,Remark,Other1,Other2 from " + model.Other2);
int rows = DbHelperSQL.ExecuteSql(strSql.ToString());
if (rows >=0)
{
return true;
}
else
{
return false;
}
}
其实合并表实现起来特别简单,一开始卡在了用like模糊搜索如何用参数模糊搜索,原来like中间可以加字符串,其他的都很简单。只要有大方向就按照大方向来肯定会实现,可能会是某个细节上会遇到问题,仔细想一想,查一下也就都解决了。