【ITOO】---评教题库导入

   今天上午做导入,开始还特别的顺利,可以一次性导入许多数据,可是到了下午,我添加一个判断:“判断数据库中是否已经存在已经要导入的数据”,由于是excel种的每一条都得判断,所以我就图省事把“查库-判断是否存在”的步骤代码写在了for循环里面!结果就报了这么一个奇葩错误:“Multiple simultaneous connections or connections with different connection strings inside the same transaction are not currently supported.”
   这个错误翻译过来就是:“ 目前不支持多个并发连接或连接不同的连接字符串在相同事务中”!

   一开始各种不明白,弄了半天的数据库连接字符串,还非常奇怪:我就连了一次啊!!!后来冯尧给了一个思路就是:判断数据库中是否存在用到了EF连接了一次数据库,批量添加数据又用到了一次数据库,而且又写到了一个循环里面,这可能就是所谓的在一次事务当中连接了多次数据库吧!你试试把判断是否重复的代码拿出来!


    就这样,我就开始了提取代码,最终代码形成如下,仅作参考:
 
//得到导入目标表的DataTable
            Dictionary<int, DataTable> dicTargetTable = this.GetImportTable(strPath, strXMLName, dicDefaultColumn, strDBKey);
            //得到导入第三张表的DataTable
            Dictionary<int, DataTable> dicThirdTable = this.GetThirdTable();
            //得到过程中出现的问题表
            Dictionary<int, DataTable> dicErrorTable = this.GetErrorTable();
            //数据库连接字符串
            //获得配置文件链接数据库的字符串
            //string connstr = ConfigurationManager.AppSettings["connectionString"];
            ITOO.Library.Core.Common.MySqlHelper mysql = new ITOO.Library.Core.Common.MySqlHelper(strDBKey);
           
           //先吧数据库中存在的数据取出来放到一个list里面
            List<EvaluationQuestionBank> listNew = new List<EvaluationQuestionBank>();
            for (int intTableIndex = 0; intTableIndex < dicTargetTable.Count; intTableIndex++)
            {
                if (dicTargetTable[intTableIndex].Rows.Count > 0)
                {
                    DataTable dtTarget = dicTargetTable[intTableIndex];                  
                    for (int i = 0; i < dtTarget.Rows.Count; i++)
                    {
                        EvaluationQuestionBank questionbank = new EvaluationQuestionBank();
                       // DataTable singledtTarget = new DataTable();
                        string questioncontent = dtTarget.Rows[i]["QuestionContent"].ToString();
                        string paperid = dicDefaultColumn["PaperID"].ToString();
                        //查询该考试内容和paperid下是否有重复的内容,有则不用导入
                        Boolean isexist = isExistPaperIdAndQuestionContent(paperid, questioncontent);
                        if (isexist == false)
                        {
                            //放入到新的list中
                            questionbank.PaperId = dicDefaultColumn["PaperID"].ToString();
                            questionbank.QuestionContent = dtTarget.Rows[i]["QuestionContent"].ToString();
                            questionbank.QuestionNo =Convert.ToInt16( dtTarget.Rows[i]["QuestionNo"]);
                            questionbank.QuestionScore= Convert.ToDecimal(dtTarget.Rows[i]["QuestionScore"].ToString());
                            questionbank.TableName = dtTarget.TableName.ToString();
                        }
                        listNew.Add(questionbank);
                    }                
 
                }
            }
 
       //然后对这个新的list提取信息
            try
            {
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
                {
                    for (int intTableIndex = 0; intTableIndex < dicTargetTable.Count; intTableIndex++)
                    {
                        if (dicTargetTable[intTableIndex].Rows.Count > 0)
                        {
                            //DataTable dtTarget = dicTargetTable[intTableIndex];
                            //开始不同
                            StringBuilder sbSql = new StringBuilder();
 
                            for (int i = 0; i < listNew.Count; i++)
                            {
 
                                string QuestionId = System.Guid.NewGuid().ToString();
                                DateTime TimeStamp = DateTime.Now;
                                string IsDeleteQuestion = "1";
                                string QuestionOrderId = "0";
                                if (listNew[i].QuestionNo == 0)
                                {
                                    continue;
                                }
                                //sql语句拼接
                                sbSql.Append("insert into ").Append(listNew[i].TableName.ToString()).Append(" (QuestionNo,QuestionContent,QuestionScore,QuestionId,IsDeleteQuestion,QuestionOrderId,TimeStamp,PaperId) values (");
 
                                sbSql.Append("'" + listNew[i].QuestionNo+ "',")
                                .Append("'" + listNew[i].QuestionContent + "',")
                                .Append("'" + listNew[i].QuestionScore + "',")
                                .Append("'" + QuestionId + "',")
                                .Append("'" + IsDeleteQuestion + "',")
                                .Append("'" + QuestionOrderId + "',")
                                .Append("'" + TimeStamp + "',")
                                .Append("'" + dicDefaultColumn["PaperID"] + "'")
                                .Append(");");
 
                            }
                            if (sbSql.Length==0)
                            {
                                break;
                            }
                            //往SQLHelper里面提交数据                               
                            int flag = mysql.ExecuteNonQuery(sbSql.ToString());
                        }
 
                    }
                    scope.Complete();
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
 
            Boolean bolIsExistErrorData = false;
            foreach (int intErrorTableIndex in dicErrorTable.Keys)
            {
                if (dicErrorTable[intErrorTableIndex].Rows.Count > 0)
                {
                    bolIsExistErrorData = true;
                }
            }
            if (bolIsExistErrorData)
            {
                return dicErrorTable;
            }
            return null;
        


总结:

    ITOO5.0用到了myql数据库,很多问题都是和sqlserver不一样的!而且mysql的修改和添加都是有限制的,只能有一个程序对同一个表进行修改和添加,所以就会造成很多问题,平时要小心,仔细,不能偷懒啊!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值