关于机房重构实现了几条线之后也能“照着葫芦画瓢”一步步实现自己所需的功能,心态与刚开始敲得时候已经完全不一样了!
其实上一篇写的是充值,充值和退卡的实现思路基本是一样的但是我充值没有用存储过程,想着退卡的时候用已下存储过程!
功能说明篇:
1.通过输入卡号判断是否有这个卡号
2.若有判断是否正在上机,没有的话提示没有重新输入卡号再判断
3.若在上机,提示不能退卡,否则更新退卡表,卡表,和充值表(注册的时候用充值表)
接口层:
Function Cancelcard(ByVal card As Entity.CardEntity, ByVal cancelinfo As Entity.CancelCardEntity) As DataTable Function selectcardno(ByVal Line As Entity.LineEntity) As DataTable
接下来是D层
Public Class SqlserverCancelCardDAL : Implements IDAL.ICancelCard Private sqlhelper As New SQLHelper.sqlHelper Public Function Cancelcard(card As CardEntity, cancelinfo As CancelCardEntity) As DataTable Implements ICancelCard.Cancelcard Dim dt As DataTable Dim sql As String = "proc_Cancelcard" '用存储过程 Dim sqlparams As SqlParameter() = {New SqlParameter("@cardNo", cancelinfo.cardNo), New SqlParameter("@Date", cancelinfo.CancelDate), New SqlParameter("@Time", cancelinfo.CancelTime), New SqlParameter("@OperatorId", cancelinfo.OperatorID)} dt = sqlhelper.ExecSelect(sql, CommandType.StoredProcedure, sqlparams) Return dt End Function Public Function selectcardno(Line As LineEntity) As DataTable Implements ICancelCard.selectcardno Dim table As DataTable Dim sql As String Dim paras As SqlParameter() = {New SqlParameter("@cardno", Line.cardNo)} sql = "select * from T_Lineinfo where cardNo=@cardno and offLineDate is null" table = sqlhelper.ExecSelect(sql, CommandType.Text, paras) Return table End Function End Class
B层:
Public Function selectcardno(ByVal Line As Entity.LineEntity) As DataTable Dim factory As New Factory.CardFactory Dim Icancelcard As ICancelCard Dim table As DataTable Icancelcard = factory.cancelcard table = Icancelcard.selectcardno(Line) Return table End Function Public Function Cancelcard(ByVal card As Entity.CardEntity, ByVal cancelinfo As Entity.CancelCardEntity) As DataTable Dim fac As New Factory.CardFactory Dim icancelcard As ICancelCard Dim dt As DataTable icancelcard = fac.cancelcard dt = icancelcard.Cancelcard(card, cancelinfo) Return dt
Public Function selectcardno(ByVal Line As Entity.LineEntity) As DataTable Dim ccbll As New BLL.CancelCardBLL Dim table As DataTable table = ccbll.selectcardno(Line) Return table End Function Public Function canclecard(ByVal cancelinfo As CancelCardEntity, ByVal card As CardEntity) As DataTable Dim CancleBLL As New BLL.CancelCardBLL Dim dt As DataTable dt = CancleBLL.cancelcard(card, cancelinfo) Return dt End Function
If txtCardNo.Text = "" Or IsNumeric(txtCardNo.Text) = False Then MsgBox("请输入卡号,卡号为数字!", vbExclamation, "警告") txtCardNo.Select() txtCardNo.Focus() Exit Sub End If Dim card As New Entity.CardEntity Dim Line As New Entity.LineEntity Dim cancelinfo As New Entity.CancelCardEntity Line.cardNo = txtCardNo.Text.Trim() Dim canclefacade As New Facade.CancelCardFacade Dim Rresult As DataTable Rresult = canclefacade.selectcardno(Line) If Rresult.Rows.Count > 0 Then MsgBox("此卡号正在上机,不能进行退卡", , "提示") txtCardNo.Text = "" Else cancelinfo.cardNo = txtCardNo.Text.Trim() cancelinfo.OperatorID = FrmLogin.txtUserName.Text.Trim() cancelinfo.CancelDate = Date.Now.ToString("yyyy-MM-dd") cancelinfo.CancelTime = DateTime.Now.ToString("HH:mm:ss") Dim ccfacade As New Facade.CancelCardFacade Dim dt As DataTable dt = ccfacade.canclecard(cancelinfo, card) If dt.Rows.Count > 0 Then txtcash.Text = dt.Rows(0).Item(6) TextBox3.Text = "退卡卡号为:" & cancelinfo.cardNo & vbCrLf & vbCrLf & "退卡金额是:" & txtcash.Text + vbCrLf & vbCrLf & "退卡时间为:" & Now & vbCrLf & vbCrLf & "进行退卡老师是:" & cancelinfo.OperatorID MsgBox("退卡成功", , "提示") txtCardNo.Text = "" txtcash.Text = "" TextBox3.Text = "" Else MsgBox("没有此卡号!", vbExclamation, "警告") txtCardNo.Text = "" txtCardNo.Select() txtCardNo.Focus() End If End If
其中关于上机不能退卡一开始这个功能实现不对发现是D层的sql语句写的有问题:
一开始代码是这样写的:
sql = "select * from T_Lineinfo where cardNo=@cardno and offLineDate =''"发现执行的结果不对,应改为:
sql = "select * from T_Lineinfo where cardNo=@cardno and offLineDate is null"null和字符串为空这个问题也是需要注意的!