[机房重构]错误记录——代码编写很重要

    在机房的过程中代码写出来并不是就结束了,还有后期的调试,总会有那种让你想不到的各种错误出现,一个简单的注册功能 ,在我这里走的并不顺畅,为了减少运行的次数,我在同一个D层中进行了两次的insert操作,生成解决方案时并没有提示错误,但是最后的执行结果是可以插入到Card表中,不能插入到Student表中,我的D层代码代码如下:     

<span style="font-family:KaiTi_GB2312;font-size:18px;">'插入到Card表
        Dim Sql As String
        Dim table As Boolean
        Dim sqlParams As SqlParameter() = {New SqlParameter("@CardNo", card.Card),
                                           New SqlParameter("@StudentNo", card.Student),
                                           New SqlParameter("@Date", card.RDate),
                                           New SqlParameter("@Time", card.RTime),
                                           New SqlParameter("@Balance", card.BL),
                                           New SqlParameter("@ID", card.ID),
                                           New SqlParameter("@Check", card.Check),
                                           New SqlParameter("@Type", card.CardType),
                                           New SqlParameter("@Status", card.CardStatus)}
        Sql = "Insert into Card_Info(CardNo,StudentNo,RegisterDate,RegisterTime,Balance,IsCheck,userID,Type,Status) Values(@CardNo,@StudentNo,@Date,@Time,@Balance,@Check,@ID,@Type,@Status)"
        table = sqlHelper.ExecAddDelUpdate(Sql, CommandType.Text, sqlParams)
</span>

<span style="font-family:KaiTi_GB2312;font-size:18px;">        If table = True Then
            '插入到Student表
            Dim Asql As String
            Dim flag As Boolean
            Dim params As SqlParameter() = {New SqlParameter("@StudentNo", student.Student),
                                            New SqlParameter("@Name", student.StudentName),
                                            New SqlParameter("@Sex", student.StudentSex),
                                            New SqlParameter("@Department", student.Dept),
                                            New SqlParameter("@Grade", student.StudentGrade),
                                            New SqlParameter("@Class", student.StudentClass),
                                            New SqlParameter("@Comment", student.SCommant)}
            Asql = "Insert into Student_Info(StudentNo,Name,Sex,Department,Grade,Class,Comment) Values(@StudentNo,@Name,@Sex,@Department,@Grade,@Class,@Comment)"
            flag = sqlHelper.ExecAddDelUpdate(Asql, CommandType.Text, params)
            Return flag
        End If
        Return table</span>
    首先进行逐步调试, 进行逐步调试显示插入Student表时最后flag的返回值是flase,在sqlHelper中它会走错误处理的那一句话, 但是就这样在sqlhelper中走过去了,并没有给出任何错误的提示,让我觉得应该就是D层的代码出问题了。

    然后开始检查代码是不是不细心有写错的地方,但是经过详细检查之后觉得没有错,还把代码放到数据库中进行查询,结果显示是正确的,

    最后我将插入的顺序调换,首先插入Student表,再插入Card表,最后结果是Student表插入成功,但是Card的并没有,通过这个结果我更坚信我的代码没有问题,我开始怀疑是不是代码的不应该这样写,我的逻辑有问题,但是又觉得没错,就这样请了好几位同学帮我检查,还是没有解决,一直到郑大神。

   下面说一下郑大神的解决思路,和我一样进行调试,最后发现是在sqlHelper那里没有给出错误提示,马上说我错误处理的代码写的不好,我原来的sqlhelper的代码如下

       


      加上错误处理进行提示后的代码如下:

      


      这样进行运行会弹出错误提示如下:

    这样可以知道“变量名在查询批次或存储过程内部必须唯一”这一重要的提示信息,所以很容易找到错误,我两次插入代码充都用到了@StudentNo这个名字

    解决方法就是将其中一个@StudentNo修改一下就可以了。就这样困惑我的这个问题就这样解决了。

    ps:以上的代码是前期写的,还存在一定的问题,实体的名字应该和数据库中字段的名字是统一的,有什么错误还请大家指正。

总结:

      一个简单的错误困扰自己很长时间,花费了很长时间最后解决掉令自己还是很开心的。我的调试让我坚信我的插入的那块代码没有写错,通过这个过程让我明白“你以为的并不是对的”。这个过程让我体会到调试的重要性,同样的调试却又不同的结果,一句简单的代码就让错误浮出水面,所以代码的编写很重要。遇到错误如果实在解决不出来就去请教一下别人,也许会收获更多,可以向别人学习到排错的技巧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 36
    评论
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值