开发到了这个紧要关头,功能基本都已经完成,剩下来的就是需要解决软件的性能问题!

    我们一开始设计的时候是:每一个得分点都判断一次,并将考生答案和考生得到的分数update到数据库中,也就是每判一个得分点就得开关一次数据库。得分点少的像IE,Windows不会造成很大的麻烦,可是想word,PPT,excel这种得分点多的,尤其是我操作的word,一套题的得分点有40多个,就相当于要开合数据库40次才判完分,这样自然就会慢很多!
    所以师哥师姐就想出了利用list一次性的update多条数据,只开合一次数据库,性能也会提高很多的!所以就出现了我接下来要说的这个拼接sql语句!
    师哥是用的case...when语句来拼接的。所以我就查了一下到底什么是case...when语句。
先来一个对比:
之前的语句:纯粹的sql语句,不难,常用。 
/// <summary>/// 判分之后返回信息到数据库/// </summary>/// <param name="studentinfo">根据考生ID判断</param>/// <returns>是否添加成功</returns>public int  ReturnScore(WordQuestionRecordEntity  studentrecord){//StudentInfoEntity student = new StudentInfoEntity();String which = WhichWordRecored(studentrecord);string sql = "update WordQuestionRecordEntity_" + which + " set Fration=@Fration,ExamAnswer =@ExamAnswer where QuestionID =@QuestionID and studentID =@studentID";SqlParameter[] paras = new SqlParameter[]{new SqlParameter("@studentID",studentrecord.StudentID ),new SqlParameter ("@Fration",studentrecord.Fration ),new SqlParameter ("@ExamAnswer",studentrecord.ExamAnswer),new SqlParameter ("@QuestionID",studentrecord.QuestionID )};int flag= sqlhelper.ExecuteNonQuery (sql, paras, CommandType.Text);return flag;}
修改之后的语句:要注意细节,比如空格的位置,逗号的位置,是否加逗号等! 
#region 将答案和分数更新到数据库中  李少然 2015年12月26日10:09:07/// <summary>/// 将答案和分数更新到数据库中/// </summary>/// <param name="list">StudentID,QuestionID,ExamAnswer,TimeStamp,fration</param>/// <param name="studentrecord">只需要一个studentID,为了查出学院ID</param>public void ReturnScore(List<WordQuestionRecordEntity> list, WordQuestionRecordEntity studentrecord){String which = WhichWordRecored(studentrecord);StringBuilder sbSql = new StringBuilder();sbSql.Append("update WordQuestionRecordEntity_" + which + " SET Fration = CASE QuestionID ");string Fation = string.Empty;string questionID = string.Empty;string studentIDs = string.Empty;string tamstamp = string.Empty;//根据学号,和时间戳选出这一段的内容,然后再根据QuestionID给每一个flag更新分数。#region 更新分数的拼接sql语句for (int i = 0; i < list.Count; i++){questionID = list[i].QuestionID.ToString();//将分数传给变量Fation = list[i].Fration;//判分sql,拼接sql,用case,when语句sbSql.Append(" WHEN '" + questionID + "' THEN '" + Fation + "'");}sbSql.Append("end,"); //加“,”#endregion#region 拼接考生答案更新到数据库中//拼接更新考生答案sqlsbSql.Append("  ExamAnswer = CASE QuestionID");for (int i = 0; i < list.Count; i++){string examAnswer = list[i].ExamAnswer.ToString();questionID = list[i].QuestionID.ToString();//学生答案信息更新,when后边的是QuerstionID,sbSql.Append(" WHEN '" + questionID + "' THEN '" + list[i].ExamAnswer + "'");}sbSql.Append(" end");   //不加逗号“,”#endregionstudentIDs += "'" + list[0].StudentID.ToString() + "'";tamstamp += "'" + list[0].TimeStamp.ToString() + "'";//去除语句最后的逗号或者括号studentIDs.Remove(studentIDs.Length - 1, 1);sbSql.Append(" where StudentID in (" + studentIDs + ") and TimeStamp in (" + tamstamp + ")");DataTable dt = sqlhelper.ExecuteQuery(sbSql.ToString(), CommandType.Text);}#endregion

简单的case语句如下:
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女' 

case的搜索语句:
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

用CASE WHEN语句可以简化我们平时工作中遇到的很多问题。如性别在表中存的是数字1、2,但是希望查询出来男、女时,就可以用case...when语句。当然它也不仅仅限于查询语句,更新语句也是可以的。比如我上面贴出的例子!
小总:
在写这个拼接语句的时候还遇到了一个好笑的事情:我当时只是顾着写这个拼接sql语句了,经过师哥的指导写出来很高兴,可是只是顾着高兴了,结果忘了用sqlhelper来进行数据库的开关操作了!!!真是对自己无语了!不过,自己学到了新的知识还是挺高兴的!

【NCRE】---拼接SQL语句(Case....When语句)相关推荐

  1. 数据库case when语句

    case when 语句 case when 语句语法结构: CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END 准备数据 //加载数 ...

  2. win32汇编实现拼接SQL语句

    字符串合并,在汇编语言,一般是用loop循环和cx寄存器,自己编程实现: 如果是win32汇编,可以使用movsb指令: 一般开发应用程序都会碰到拼接SQL语句,在C#这些语言用字符串连接的加号就可以 ...

  3. SQL中的CASE WHEN语句

    有这样一道面试题: 一张表数据如下 1900-1-1 胜 1900-1-1 胜 1900-1-1 负 1900-1-2 胜 1900-1-2 胜 写出一条SQL语句,使检索结果如下: 胜 负 1900 ...

  4. 了解SQL Server CASE语句

    SQL Server CASE statement is equivalent to the IF-THEN statement in Excel. SQL Server CASE语句等效于Excel ...

  5. java拼接sql语句的in条件

    1.问题 java拼接sql语句的in条件,需要将列表或数组转换为(" "," ")的格式 2.代码 StringBuffer sbuffer= new Str ...

  6. SQL语句--CASE函数写法的简单举例,及应用

    SQL语句–CASE函数写法的简单举例,及应用 ---case函数的基本结构:case when...then...else... ----可以写也可以不写,按实际需求end [举个栗子_1] eg1 ...

  7. oracle数据库拼接sql语句字符串问题

    近日遇到一个问题,在使用存储过程拼接动态语句时,传输参数一直提示无效标识符,研究发现拼接sql语句的时候,作为字符串参数的变量要加' ',具体代码如下: declarevc_sql varchar2( ...

  8. Case When语句详解SQL中Case When的用法

    SQL中case when的用法 case when类似于编程语言中的if else判断.switch case语句.该语句执行时先对条件进行判断,然后根据判断结果做出相应的操作. Case具有两种格 ...

  9. SQL的case when then else end语句的用法

    尊重原创:http://blog.csdn.net/love_java_cc/article/details/52234415 [sql] view plaincopy SELECT a.manage ...

最新文章

  1. 《Node.js区块链开发》一3.5 亿书对DPoS机制的改进
  2. 自动打包+ios+android,使用 python 自动打包 Android 和 iOS
  3. 45. ExtJS ComboBox 下拉列表详细用法
  4. 易流即时配送_即时大数据流处理=即时风暴
  5. 专访:混合云的发展趋势
  6. java memcmp_C 库函数
  7. java ajax异步验证,【求助】真的不会做了。。关于AJAX异步验证的问题。。
  8. datagrid combobox 选择后显示valueField 而不是 textValue解决方法
  9. 学java怎么做笔记?教大家整理java笔记的一些方法
  10. oracle物理结构视频教学,详解Oracle物理结构
  11. 基于python实现Maxwell软件的自动化仿真分析_1
  12. 湖南职称计算机模拟试题,湖南职称计算机考试培训软件:集职称计算机考试模拟题、长沙职称计算机考试题库...
  13. “3W1H法”浅析三层架构
  14. Excel复制到word,清除格式后行间距过大
  15. java实现runnable接口_JAVA 实现Runnable接口
  16. 中芯国际三季度营业收入创新高;德州仪器与德赛西威签署合作备忘录 | 全球TMT...
  17. 数据分析SQL【离职率】和【司龄】的计算
  18. 介绍一个关于小米Zigbee的开源项目
  19. 付费学习,花钱比意志力靠谱
  20. [JavaScript]关于JavaScript中DOM对象的使用

热门文章

  1. 《炬丰科技-半导体工艺》石英深反应离子刻蚀特性研究
  2. crc 校验错误_信道编码之循环冗余校验(CRC)
  3. [精彩泄漏截图] 2006最值得期待的游戏
  4. Java程序员拼多多3轮面试,这些面试题你能掌握多少?
  5. C++模版与特化与偏特化
  6. 经典图书介绍:广义相对论--从A到B
  7. CuraEngine源码编译
  8. lay和lied_lay和lie的区别
  9. docer中运行crontab
  10. 飞鱼手机短信语音验证码接收平台API接口例子