调错部分

  上一篇博客《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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  考虑到或许是数据库改了些内容后没有更新保存成功的原因,将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 释放资源,故想到的解决的方法是:在选择下一个被结账用户之初,将控件进行清空,最后完美解决:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

  结账部分到此结束~

VB.net版机房收费系统——结账功能实现(调错与优化)的更多相关文章

  1. VB.NET版机房收费系统---异常处理

    异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台 ...

  2. VB.NET版机房收费系统---导出Excel表格

    datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...

  3. VB.NET版机房收费系统---报表

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

  4. VB.NET版机房收费系统---七仙女之系统登录

    VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...

  5. VB.NET版机房收费系统---外观层如何写

    外观设计模式,<大话设计模式>第103页详细讲解,不记得这块知识的小伙伴可以翻阅翻阅,看过设计模式,敲过书上的例子,只是学习的第一步,接着,如果在我们的项目中灵活应用,把设计模式用出花儿来 ...

  6. VB.NET版机房收费系统---外观层怎样写

    外观设计模式.<大话设计模式>第103页具体解说,不记得这块知识的小伙伴能够翻阅翻阅,看过设计模式,敲过书上的样例,仅仅是学习的第一步,接着,假设在我们的项目中灵活应用,把设计模式用出花儿 ...

  7. VB.NET版机房收费系统---组合查询

    查询的意思就是查找,寻找,指在某一个或几个地方找出自己所要的信息,假如我想搜索一下我自己写的博客,名字叫做初雪之恋,我在百度的搜索框中输入丁国华三个字,会有怎样的惊喜等着我? 啊哦,这个信息并不是我想 ...

  8. VB.NET版机房收费系统—数据库设计

    之前第一遍机房收费的时候,用的数据库是别人的.认知也仅仅能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看曾经的数据库,发现数据库真的还须要进一步的优化.以下是我设计 ...

  9. VB.NET版机房收费系统—DataGridView应用

    事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句, ...

随机推荐

  1. 【Ts 3】Nginx的Http(图片)服务器配置+ftp上传使用说明

    在前两篇博客中提到了搭建Nginx和Ftp服务器,在本篇博客,主要是介绍Nginx的配置文件的使用,怎样修改配置文件使其成为一个图片服务器. 一.Nginx图片服务器配置 <span style ...

  2. hdu 1527 威佐夫博弈

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍

    一.rewrite地址重写 地址转发后客户端浏览器地址栏中的地址显示是不变的,而地址重写后地址栏中的地址会变成正确的地址. 在一次地址转发过程中只会产生一次网络请求,而一次地址重写产生两次请求. 地址 ...

  4. BZOJ 3230 相似子串 ——后缀数组

    题目的Source好有趣. 我们求出SA,然后求出每一个后缀中与前面本质不同的字符串的个数. 然后二分求出当前的字符串. 然后就是正反两次后缀数组求LCP的裸题了. 要注意,这时两个串的起点可能会相同 ...

  5. java面试题之stop()和suspend()方法为何不不推荐使⽤?

    stop方法:他是不安全的,他会停止所有运行中的线程: suspend方法:容易发生死锁,虽然调用suspend方法目标线程会停下来,但是仍然持有之前的锁,其他线程都不能访问锁定的资源,就会造成死锁, ...

  6. cf3D Least Cost Bracket Sequence

    This is yet another problem on regular bracket sequences. A bracket sequence is called regular, if b ...

  7. vue项目实战, webpack 配置流程记录

    vue项目实战记录,地址在这 购物车单界面 npm install npm run dev 跑起来可以看到界面效果 这里简单记录一下webpack的编译流程 入口 package.json " ...

  8. Vxlan简介

    1.为什么需要Vxlan 1.什么是VXLAN VXLAN(Virtual eXtensible LAN可扩展虚拟局域网),是一种mac in UDP技术.传统的二层帧被封装到了UDP的报文中,通过U ...

  9. win8激活工具,win 8激活工具,windows8激活工具,赶紧来下载咯

    同事前几天买了一个电脑,装的win8的系统,由于装office,需要激活,找了下office的激活工具,那个Office激活工具自带有win8激活,同事点错了,把正版系统给激活了,变成盗版了(悲剧.. ...

  10. 转 C++STL之string

    http://www.cnblogs.com/wangkangluo1/archive/2011/07/22/2114118.html string类的构造函数: string(const char ...