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

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

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


    就这样,我就开始了提取代码,最终代码形成如下,仅作参考:
 
//得到导入目标表的DataTable
            Dictionary dicTargetTable = this.GetImportTable(strPath, strXMLName, dicDefaultColumn, strDBKey);
            //得到导入第三张表的DataTable
            Dictionary dicThirdTable = this.GetThirdTable();
            //得到过程中出现的问题表
            Dictionary dicErrorTable = this.GetErrorTable();
            //数据库连接字符串
            //获得配置文件链接数据库的字符串
            //string connstr = ConfigurationManager.AppSettings["connectionString"];
            ITOO.Library.Core.Common.MySqlHelper mysql = new ITOO.Library.Core.Common.MySqlHelper(strDBKey);
           
           //先吧数据库中存在的数据取出来放到一个list里面
            List listNew = new List();
            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的修改和添加都是有限制的,只能有一个程序对同一个表进行修改和添加,所以就会造成很多问题,平时要小心,仔细,不能偷懒啊!


你可能感兴趣的:(------ITOO,------C#,.【计算机学习】)