分享

三层架构

 slq803 2017-01-19

 

.net版机房收费系统时,希望在各方面有一些革新,用一些新东西(当然,这也是这次的要求).做学生注册时,一个学生注册后,需要更新三个表——StudentInfo表、CardInfo表、Recharge表

初步设计的表,随着系统的深入可能会有改动

 

CardInfo

StuID

CardID

Cash

Status

IsCheck

Date

Time

UserName

学号

卡号

金额

使用状态

是否结账

注册日期

注册时间

办理人

 

StudentInfo

StuID

StuName

Sex

Department

Grade

Class

Explian

UserName

学号

姓名

性别

系别

年级

班级

备注

办理人

 

Recharge

CardID

ChargeCash

ChargeDate

ChargeTime

UserName

IsCheck

卡号

充值金额

充值日期

充值时间

办理人

是否结账

(注:注册时,要在学生信息表(StudentInfo)添加学生信息,在卡信息表(CardInfo)添加办理的卡的信息,注册办卡时,要充值,在充值信息表(Recharge)中添加充值记录)

 

        这样的话,一个注册功能需要三条sql语句,此时想到了存储过程.我的代码是这样的.

       以下代码不仅仅展示了存储过程的一个应用,更是一个三层架构的实际应用——例子

 

(初步代码)

存储过程:

  1. Create procedure [dbo].[pro_StuRegister]   
  1. @StuID varchar(20),@StuName varchar(20),@Sex varchar(20),@Department varchar(20),@Grade varchar(20),@Classes varchar(20),@Explian varchar(100),@CardID varchar(20),@Cash varchar(20),@Status varchar(20),@IsCheck varchar(20),@Date varchar(20),@Time varchar(20),  
  2. @ChargeCash numeric(10,2),@ChargeDate varchar(20),@ChargeTime varchar(20),@UserName varchar(20)  
  1. as  
  2.    insert into studentInfo(StuID,StuName,Sex,Department,Grade,Class,Explian) values(@StuID,@StuName,@Sex,@Department,@Grade,@Classes,@Explian)  
  3.      
  1. insert into CardInfo(StuID , CardID,Cash,Status ,IsCheck ,Date ,Time ) values(@StuID , @CardID ,@Cash,@Status ,@IsCheck ,@Date ,@Time)   
  1. insert into  Recharge(CardID,ChargeCash ,ChargeDate ,ChargeTime ,UserName ,Ischeck ) values(@CardID ,@ChargeCash ,@ChargeDate ,@ChargeTime ,@UserName ,@IsCheck )  
  1. go     



 

DAL层:

  1. Imports System  
  2. Imports System.Collections.Generic  
  3. Imports System.Linq  
  4. Imports System.Text  
  5. Imports System.Data  
  6. Imports System.Data.SqlClient  
  7. Public Class student_DA  
  8.     ''' <summary>  
  9.     ''' <span style="color:#006600;">判断学号是否存在</span>  
  10.     ''' </summary>  
  11.     ''' <param name="student"></param>  
  12.     ''' <returns></returns>  
  13.     ''' <remarks></remarks>  
  14.     Public Function IsStuIDExist_DA(ByVal student As Model.student) As Boolean  
  15.   
  16.         Dim sql As String = "select count(*) from studentInfo where StuID=@StuID"   'sql语句  
  17.         Dim parameter As SqlParameter = New SqlParameter("@StuID", student.StuID)  '设置参数  
  18.         Dim bool As Boolean                                            '定义Boolean类型变量,接收此方法返回值  
  19.   
  20.         '调用SqlHelper类中的ExcuteScalar()方法,通过返回值设置bool的值  
  21.         If (CInt(New SqlHelper.SqlHelper().Executescalar(sql, CommandType.Text, parameter) > 0)) Then  
  22.             bool = True    '有记录,返回True  
  23.         Else  
  24.             bool = False     '无记录,返回False  
  25.         End If  
  26.   
  27.         Return bool  
  28.     End Function  
  29.     ''' <summary>  
  30.     ''' <span style="color:#006600;">学生注册  
  31. </span>    ''' </summary>  
  32.     ''' <param name="student"></param>  
  33.     ''' <returns></returns>  
  34.     ''' <remarks></remarks>  
  35.     Public Function StuRegister_DA(ByVal student As Model.student, ByVal card As Model.card, ByVal recharge As Model.recharge) As Integer  
  36.   
  37.         '设置参数数组  
  38.         Dim parameters() As SqlParameter =  
  39.                {  
  40.                 New SqlParameter("@StuID", student.StuID),  
  41.                 New SqlParameter("@StuName", student.StuName),  
  42.                 New SqlParameter("@Sex", student.Sex),  
  43.                 New SqlParameter("@Department", student.Department),  
  44.                 New SqlParameter("@Grade", student.Grade),  
  45.                 New SqlParameter("@Classes", student.Classes),  
  46.                 New SqlParameter("@Explian", student.Explian),  
  47.                 New SqlParameter("@CardID", card.CarID),  
  48.                 New SqlParameter("@Cash", card.Cash),  
  49.                 New SqlParameter("@Status", card.Status),  
  50.                 New SqlParameter("@IsCheck", card.IsCheck),  
  51.                 New SqlParameter("@Date", card.Dates),  
  52.                 New SqlParameter("@Time", card.Time),  
  53.                 New SqlParameter("@ChargeCash",recharge.ChargeCash ),  
  54.                 New SqlParameter ("@ChargeDate",recharge .ChargeDate ),  
  55.                 New SqlParameter ("@ChargeTime",recharge .ChargeTime ),  
  56.                 New SqlParameter ("@UserName",recharge .UserName )  
  57.                 }  
  58.   
  59.         Dim result As Integer     '定义Integer型变量,接收SqlHelper类中的ExecuteNone()方法的返回值,同时作为此方法的返回值  
  60.   
  61.         '将ExecuteNone()方法返回值赋给变量result  
  62.         result = New SqlHelper.SqlHelper().ExecuteNone("Pro_StuRegister", CommandType.StoredProcedure, parameters)  
  63.   
  64.         Return result  
  65.          
  66.     End Function  
  67. End Class  

 

BLL层:

  1. Public Class student_BLL  
  2.  ''' <summary>  
  3.     ''' 学生注册  
  4.     ''' </summary>  
  5.     ''' <param name="student"></param>  
  6.     ''' <returns></returns>  
  7.     ''' <remarks></remarks>  
  8.     Public Function StuRegiste_BLL(ByVal student As Model.student, ByVal card As Model.card, ByVal recharge As Model.recharge) As Boolean  
  9.   
  10.         Dim student_da As DAL.student_DA = New DAL.student_DA()    '实例化DAL层student_DA类  
  11.         Dim card_bll As BLL.card_BLL = New BLL.card_BLL()          '实例化BLL层card_BLL类  
  12.         Dim result As Integer                                    '定义Integer型变量,存放DAL层StuRegister_DAL()方法的返回值  
  13.         Dim bool As Boolean                                       '定义Boolean型变量,存放此方法的返回值  
  14.   
  15.         '判断卡号是否存在  
  16.         If card_bll.IsCardIDExist(card) Then  
  17.             Throw New Exception("此卡号已存在!")  
  18.             Exit Function  
  19.   
  20.         End If  
  21.   
  22.         '判断学号是否存在  
  23.         If student_da.IsStuIDExist_DA(student) Then             '  
  24.   
  25.             Throw New Exception("此学号已存在!")  
  26.             Exit Function  
  27.   
  28.         End If  
  29.   
  30.         '判断添加信息是否成功  
  31.         result = student_da.StuRegister_DA(student, card, recharge)    '接收DAL层StuRegister_DAL()方法的返回值(调用DAL层StuRegister_DA()方法,判断是否注册成功)  
  32.   
  33.         If result > 0 Then  
  34.             bool = True          '学生注册(添加学生信息)成功,返回值为True  
  35.             'Else  
  36.             '    bool = False           '学生注册(添加学生信息)未成功,返回值为False  
  37.         Else  
  38.             Throw New Exception("注册失败!")  
  39.         End If  
  40.   
  41.         Return bool          '返回Boolean值,True为注册成功,False为注册失败  
  42.   
  43.     End Function  
  44. End Class  


UI层:

  1. Public Class FrmStuRegister  
  2.  '点击“注册”按钮  
  3.     Private Sub btStuRegister_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btStuRegister.Click  
  4.         Dim student_bll As BLL.student_BLL = New BLL.student_BLL()   '实例化BLL层student_BLL  
  5.         Dim card_bll As BLL.card_BLL = New BLL.card_BLL()            '实例化BLL层card_BLL  
  6.         Dim student As Model.student = New Model.student()             '实例化实体类student  
  7.         Dim card As Model.card = New Model.card()  
  8.         Dim recharge As Model.recharge = New Model.recharge()  
  9.   
  10.         student.StuID = txtStuID.Text.Trim()                          '给属性赋值  
  11.         student.StuName = txtStuName.Text.Trim()  
  12.         student.Sex = CmbSex.Text.Trim()  
  13.         student.Department = txtDepartment.Text.Trim()  
  14.         student.Grade = txtGrade.Text.Trim()  
  15.         student.Classes = txtClass.Text.Trim()  
  16.         student.Explian = lstExplian.Text  
  17.   
  18.         card.StuID = student.StuID  
  19.         card.CarID = txtCardID.Text.Trim()  
  20.         card.Cash = txtChargeCash.Text.Trim()  
  21.         card.Status = "使用"  
  22.         card.IsCheck = "未结账"  
  23.         card.Dates = Now  
  24.         card.Time = Now  
  25.   
  26.         recharge.CardID = card.CarID  
  27.         recharge.ChargeCash = card.Cash  
  28.         recharge.ChargeDate = card.Dates  
  29.         recharge.ChargeTime = card.Time  
  30.   
  31.         '判断输入是否有空值  
  32.         Dim txt As Control     '定义类型为控件的变量  
  33.         For Each txt In Me.Controls   '遍历此界面中所有此类型控件  
  34.   
  35.             '当控件类型为TextBox,并且有内容为空时,弹出提示框  
  36.             If (txt.GetType().Name = "TextBox" And txt.Text = "") Then         '我的这个方法有缺陷(要改正)  
  37.                 MessageBox.Show("输入信息不能为空!请将信息输入完整!")  
  38.   
  39.             End If  
  40.         Next  
  41.   
  42.         '判断输入格式是否正确  
  43.         If Not IsNumeric(txtStuID.Text.Trim()) Then  
  44.             MessageBox.Show("学号请输入数字!")  
  45.             Exit Sub  
  46.   
  47.         End If  
  48.   
  49.         If Not IsNumeric(txtCardID.Text.Trim()) Then  
  50.             MessageBox.Show("卡号请输入数字!")  
  51.             Exit Sub  
  52.   
  53.         End If  
  54.   
  55.         If Not IsNumeric(txtGrade.Text.Trim()) Then  
  56.             MessageBox.Show("年级请输入数字!")  
  57.             Exit Sub  
  58.   
  59.         End If  
  60.   
  61.         If Not IsNumeric(txtClass.Text.Trim()) Then  
  62.             MessageBox.Show("班级请输入数字!")  
  63.             Exit Sub  
  64.   
  65.         End If  
  66.   
  67.         If Not CmbSex.Text = "女" Or CmbSex.Text = "男" Then  
  68.             MessageBox.Show("请正确输入性别!")  
  69.         End If  
  70.   
  71.         '以上判断完成后,开始注册  
  72.         Try  
  73.             If student_bll.StuRegiste_BLL(student, card, recharge) Then  
  74.                 MessageBox.Show("注册成功!")  
  75.             End If  
  76.   
  77.         Catch ex As Exception  
  78.             MessageBox.Show(ex.Message)  
  79.         End Try  
  80.   
  81.     End Sub  
  82. End Class  

 

SqlHelper类:

  1. <span style="font-size:18px;"> </span><p>Imports System  
  2. Imports System.Collections.Generic  
  3. Imports System.Linq  
  4. Imports System.Text  
  5. Imports System.Data  
  6. Imports System.Data.SqlClient  
  7. Imports System.Configuration  '必须要在管理器中添加引用</p><p> </p><p>Public Class SqlHelper</p><p>''' <summary>  
  8.     ''' 执行增删改三个操作,(无参)  
  9.     ''' </summary>  
  10.     ''' <param name="cmdText">需要执行语句——Sql语句、存储过程</param>  
  11.     ''' <param name="cmdType">判断Sql语句的类型</param>  
  12.     ''' <returns>Interger,受影响的行数</returns>  
  13.     ''' <remarks></remarks>  
  14.     Public Function ExecuteNone(ByVal cmdText As String, ByVal cmdType As CommandType) As Integer  
  15.         '为要执行的命令cmd赋值  
  16.         cmd.CommandText = cmdText       'sql语句  
  17.         cmd.CommandType = cmdType       '设置执行语句的类型(sql语句、存储过程?)  
  18.         cmd.Connection = conn           '设置连接  
  19.   
  20.         '执行操作  
  21.         Try  
  22.             conn.Open()  
  23.             Return cmd.ExecuteNonQuery()  
  24.         Catch ex As Exception  
  25.             Return 0  
  26.         Finally  
  27.             Call CloseConn(conn)  
  28.             Call CloseCmd(cmd)  
  29.         End Try  
  30.     End Function</p><p> </p><p>    ''' <summary>  
  31.     ''' 关闭connection连接  
  32.     ''' </summary>  
  33.     ''' <param name="conn">需要关闭的连接</param>  
  34.     ''' <remarks></remarks>  
  35.     Public Sub CloseConn(ByVal conn As SqlConnection)  
  36.         If (conn.State <> ConnectionState.Closed) Then  '如果没有关闭  
  37.             conn.Close()                    '关闭连接  
  38.             conn = Nothing                              
  39.         End If</p><p>    End Sub</p><p>  
  40.     ''' <summary>  
  41.     '''   
  42.     ''' 关闭command命令  
  43.     ''' </summary>  
  44.     ''' <param name="cmd">需要关闭的命令</param>  
  45.     ''' <remarks></remarks>  
  46.     Public Sub CloseCmd(ByVal cmd As SqlCommand)</p><p>      If Not IsNothing(cmd) Then          '若cmd命令存在  
  47.             cmd.Dispose()                   '销毁  
  48.             cmd = Nothing    
  49.         End If  
  50.     End Sub</p><p>End Class  
  51.   
  52. </p>  


(注:不要忘记在UI层添加引用System.configuration

)

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多