zoukankan      html  css  js  c++  java
  • VB.net版机房收费系统——结账功能实现(调错与优化)

    调错部分

      上一篇博客《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'
    	begin
    	select @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也不能用。若是有记录。结账操作后,button会不能用,图中所看到的的数据会恢复默认值0
     


      在优化的时候碰到的问题就是,前一个用户的记录会一直显示,哪怕选择了新的被结账用户,代码的写作思路导致不能用Exit sub 释放资源,故想到的解决的方法是:在选择下一个被结账用户之初,将控件进行清空,最后完美解决:

      结账部分到此结束~


  • 相关阅读:
    双系统重装windows后,修复grub启动
    【转】GeoIP + PHP 完全指南
    【转】Linux压缩打包命令使用方法
    【转】linux screen 的使用 教程
    【转】tar打包命令详解
    【转】SecureCRT 显示乱码问题(总结)
    【转】Windows Server 2008 配置终端服务
    【转】vsftp 添加用户 简单步骤
    【转】用移动硬盘装WIN7出现NTLDR is missing
    【转】Qt集成到VS2008中 ( Qt4.5.1 + qtvsaddin1.0.0 )
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7202735.html
Copyright © 2011-2022 走看看