Private Sub btnAdd_Click(sender As Object,e As EventArgs) Handles btnAdd.Click '添加按钮 Dim ADDStu As New StuBLL.ManageBLL '实例化B层的类ManageBLL,实现对B层的引用 Dim Ustudent As New StuEntity.StudentEntity '实例化实体层类StudentEntity,方便存储参数 '对文本框的输入做限制 If Trim(txtID.Text) = "" Or IsNumeric(Trim(txtID.Text)) = False Then MessageBox.Show("请输入合适学号,再进行该操作") Exit Sub End If If Trim(txtName.Text) = "" Then MessageBox.Show("请输入姓名,再进行该操作") Exit Sub End If If Trim(txtTel.Text) = "" Or IsNumeric(Trim(txtTel.Text)) = False Then MessageBox.Show("请输入联系电话,再进行该操作") Exit Sub End If '给实体类的属性赋值 Ustudent.StuID = CInt((txtID.Text)) Ustudent.StuMarks = Trim(CStr(txtName.Text)) Ustudent.StuTel = CDec(txtTel.Text) '调用类方法 AddStuManager 并报告 If ADDStu.AddStuManager(Ustudent) Then MessageBox.Show("添加成功,请刷新") Else MessageBox.Show("该学号已添加,请重新添加") End If End Sub@H_404_0@ 通过上面的代码,知道U层实例化B层的类ManageBLL 调用了它的AddStuManager方法 完成了该操作,它就是这样引用了B层。 @H_404_0@ 接下看看,它所引用的B层是如何构建并实现的:
Imports StuDAL Imports StuEntity Public Class ManageBLL Public Function AddStuManager(ByVal stuInfoEn As StuEntity.StudentEntity) As Boolean '判断可否插入信息,并返回布尔值 Dim Controller As New StuDAL.sqlDAL '实例化D层类sqlDAL,完成对D层的引用 Dim StuInfo As New StuEntity.StudentEntity '引用实体类,以便储存一定的参数 If Controller.IsExist(stuInfoEn) = True Then '根据ID判断该条记录是否已经存在,若存在返回False Return False Else '若不存在,执行添加的方法,并返回True Controller.AddStu(stuInfoEn) Return True End If End Function End Class@H_404_0@ 其实B层发挥的作用其实很大,对数据加工在上面的代码中没有很好的体现,只是对D层返回的数据进行了简单的判断。这里B层实例化了D层中的类sqlDAL ,调用了它的IsExit()和AddStu()方法,就这样引用了D层,完成了自己的业务逻辑。 @H_404_0@ 无论B层的逻辑简单还是复杂,都妨碍不了D层,它只专注与对数据库数据的操作。 @H_404_0@
Imports StuEntity Public Class sqlDAL Public Function AddStu(ByVal stuinfoen As StuEntity.StudentEntity) As Boolean '根据传入的参数StudentEntity,执行 数据库 插入命令 并返回布尔值 Dim con As sqlClient.sqlConnection Dim cmd As sqlClient.sqlCommand Dim intResult As Integer con = New sqlClient.sqlConnection(ContactDAL.sqlString()) ‘建立对数据库的连接 cmd = con.CreateCommand() cmd.CommandText = "insert into T_Names (ID,Name,Tel) values (" & stuinfoen.StuID & ",'" & stuinfoen.StuMarks & "'," & stuinfoen.StuTel & ")" ’对数据中数据操作的具体sql语句 cmd.CommandType = CommandType.Text con.Open() ‘打开对数据库的连接 intResult = cmd.ExecuteNonQuery() ,执行sql语句,并返回执行结果 If intResult < 0 Then ,如果操作成功,则返回True,失败则返回False Return True Else Return False End If con.Close() ’关闭连接, con = Nothing ,清楚存储 End Function Public Function IsExist(ByVal stuinfoen As StuEntity.StudentEntity) As Boolean '根据传入的参数StudentEntity,执行数据查询命令,检查是否有要检索的内容 Dim con As sqlClient.sqlConnection = New sqlClient.sqlConnection(ContactDAL.sqlString()) Dim cmd As sqlClient.sqlCommand Dim dalReader As sqlClient.sqlDataReader cmd = con.CreateCommand cmd.CommandText = "select *from T_Names where ID='" & stuinfoen.StuID & "'" cmd.CommandType = CommandType.Text con.Open() dalReader = cmd.ExecuteReader() If dalReader.HasRows = True Then Return True Else Return False End If con.Close() con = Nothing End Function End Class@H_404_0@ 三层之间U层引用B层,B层引用D层这样一个机制就这样构成了。 这里不得不再提一下这个实体层StuEntity,它存在于三层架构之外,但它的存在大大帮助了三层的实现,因为在层与层之间的调用上需要传递一些参数,实体类恰好就是这样一个装载参数的容器。通过上面的代码也可以看出,三个层中都引用到了实体类,而且主要用于储存和传递参数。以下是实体层的构建:
@H_404_0@
'定义实体类,存储数据表T_Names中的数据 Public Class StudentEntity '声明私有字段 Private _StuID As Integer Private _StuMark As String Private _StuTel As Integer Property StuID As Integer '定义StuId属性 Get Return _StuID End Get Set(value As Integer) _StuID = value End Set End Property Property StuMarks As String '定义StuMarks属性 Get Return _StuMark End Get Set(value As String) _StuMark = value End Set End Property Property StuTel As Integer '定义StuTel属性 Get Return _StuTel End Get Set(value As Integer) _StuTel = value End Set End Property End Class这是我对三层的理解,这个小例子的制作让我对三层有了进一步的了解,其中还有些偏差,还望各位读者多多指出,相互交流,共同进步。