VB.net版机房收费系统——结账功能实现(调错与优化)
来源:互联网 发布:淘宝网系统架构分析 编辑:程序博客网 时间:2024/05/21 06:17
调错部分
上一篇博客《VB.net版机房收费系统——结账功能实现(代码部分》说的是结账功能的实现,亮出了代码,是在为这篇博客做铺垫。虽然结账功能代码是借鉴的巨人的博客,但是自己比着葫芦画瓢还是有欠妥的地方,毕竟每一个人作画的能力是不一样的,就和唱歌跑调似的。
悟空用如意金箍棒三打白骨精,我用仅有的耐心和智商调Bug,论白骨精和Bug孰是孰非,对此只想说,祝愿所有的程序员都能嫁个姓“梅”的,孩子取名“梅Bug”。
期初是列名无效,然后尝试将存储过程中的一句代码:
exec('select CardNo ,StudentNo,RegisterDate ,RegisterTime from T_Card_Info where Head='+@UserID+' and IsCheck='+@IsCheck+'')后边的关于Ischeck 的内容去掉,发现查询记录不是0,可以返回一张表了,于是便猜想是不是存储过程中不能涉及到汉字的原因,之后,我将实体中承载的所有的“已结账”和“未结账”全部换成了“Y”或“N"。
虽然这样做并没有帮到我什么,不过总算是换了个错误:无法找到表0
考虑到也许是数据库改了些内容后没有更新保存成功的原因,将SQL关了后重新开,报的错误是:列名“N”无效,期初以为是D层赋值代码的问题:New SqlParameter("@IsCheck", "N"),尝试将其改成实体赋值还是同样的问题。
后得知是存储过程的问题,期初我的语句是这样写的:
exec('select CardNo ,StudentNo,RegisterDate ,RegisterTime from T_Card_Info where Head='+@UserID+' and IsCheck='+@IsCheck+'')改成这样就可以了:
declare @sql char(500)--查询表T_Card_Info中的售卡记录if @CheckDetail ='SellCard'beginselect @sql ='select CardNo ,StudentNo,RegisterDate ,RegisterTime from T_Card_Info where Head='+ char(39)+@UserID+ char(39)+char(32)+'and IsCheck='+char(39)+@IsCheck+char(39) exec(@sql)end原因:
char(39)代表单引号
('select * from table where id='+char(39)+edit1+char(39)) 等效于('select * from table where id=''' +edit1+ '''';
'select * from table where id=''' +edit1.text+ ''';在delphi中语法检查通不过的,这样写是为了程序的可读性,因为'在DELPHI的物质性,换用char(39)或#39来代替,所以写'select * from table where id='+char(39)+edit1+char(39)
解决完以上问题后报错:索引超出范围。必须为非负值并小于集合大小
通过上图可以知道是代码书写的问题,我要显示的是充值信息,代码上边部分还写的是DgvRecharge,结果下边显示数据的时候用却DgvSellCard,所以代码敲错了,才是上述错误的根源。
之后运行的时候,出现了如下错误:
“System.InvalidCastException”类型的未经处理的异常在 Microsoft.VisualBasic.dll 中发生
其他信息: 从字符串“088 33 11 ”到类型“Double”的转换无效。
按照如下红色框中的代码写就行了,进行数据类型的转换即可~
优化部分
说到优化,无非是一件事:不能重复结账。我的代码书写方式导致选择了被结账的用户后不能用弹出框提示,否则若是售卡、充值和退卡没有记录,会连续弹出3个提示框,故用label代替了。
用btnCheck的enable属性来控制,所以,判断cmbUserID选择是否为空都不用了,因为若是不选,btnCheck不能用。若是售卡、充值、退卡工作记录查询为空,btnCheck也不能用,若是有记录,结账操作后,按钮会不能用,图中所示的数据会恢复默认值0
在优化的时候碰到的问题就是,前一个用户的记录会一直显示,哪怕选择了新的被结账用户,代码的写作思路导致不能用Exit sub 释放资源,故想到的解决办法是:在选择下一个被结账用户之初,将控件进行清空,最后完美解决:
结账部分到此结束~
- VB.net版机房收费系统——结账功能实现(调错与优化)
- VB.net版机房收费系统——结账功能实现(代码部分)
- 【VB与数据库】——机房收费系统之结账
- 【机房收费系统——报表与vb交互之日结账和周结账】
- 机房收费系统—结账
- 机房收费系统—结账
- 机房收费系统—结账
- 机房收费系统—结账
- 机房收费系统—结账
- 机房收费系统之结账与报表(三)VB与报表代码《一学就会傻瓜版》
- VB查询数据库之结账——机房收费系统总结(五)
- 机房收费—结账
- 【VB与数据库】机房收费系统设计阶段之结账
- vb.net版机房收费系统重构的成长历程(功能实现篇)
- 机房收费系统——结账
- 机房收费系统——结账
- 【机房收费系统】——结账
- 【机房收费系统】——结账
- 你为什么离职?--面试可以接受的离职理由
- 单项链表
- eclipse入门系列(一)jdk与tomcat的配置与安装
- 【NOIP2015模拟11.2晚】我的天
- 区间dp
- VB.net版机房收费系统——结账功能实现(调错与优化)
- 郁金香C++辅助初级班读书笔记
- 浅谈一类积性函数的前缀和
- 顺序栈的初始化
- JAVA框架之Hibernate【Hibernate缓存详解】
- CGAL编译与配置
- jQuery 中$.ajax()常用详解
- 爬楼梯问题(动态规划)
- 面试时谈薪金问题的技巧