考试系统——数据库之合并动态生成表

  

    合并动态生成的表思路:首先先动态生成一张表,循环遍历数据库中具有相同考试名称题型的答题记录表,再一一把查询出来的每一张表的答题记录合并到一张新生成的表中。

        

    首先我们这是合并具有相同表结构的数据,所以比较简单一点,直接把数据拿过来就可以了。其次用到的是模糊搜索数据库中所有的表,模糊搜索一开始自己想的有点局限了就卡在这了,其实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中间可以加字符串,其他的都很简单。只要有大方向就按照大方向来肯定会实现,可能会是某个细节上会遇到问题,仔细想一想,查一下也就都解决了。

评论 58
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值