对于三层总体来说是理解的,三层之间的关系在上篇博客(三层基本理解)中已经有说明,看着三层的代码感觉对于D层中的数据库的代码还不是很熟悉。现在大致分析一下D层的代码。
DAL层:引用实体层,进行数据库的连接,将查询到的记录赋值给实体层。
Public Class UserDAO
'首先创建数据库的连接
Public conn As New SqlConnection("server=(local);database=Login;user id=sa;password=www") '这里的server后面写成.也可以
'传实体userinfo,而不是参数,这样可方便对实体中的参数进行调用
Public Function SelectUser(ByRef User As UserInfo) As Entity.UserInfo
'定义类型为sqlDatareader的变量reader
Dim reader As SqlDataReader
'实例化新的userinfo
Dim eUser As New Entity.UserInfo
'下面的这段程序就相当于dim sql as string ="select ID,UserName,PWD From Users Where UserName='"User.UserName"' And PWD='"User.PWD"'"
'而写成这个程序块是为了防止Sql注入,即安全性考虑,这个地方还没有深究,以后再慢慢研究
'@UserName相当于传了一个参数,("@UserName", User.UserName)相当于给参数名字传递了参数。
Dim sql As String = "Select UserName,Password From Users Where username=@UserName And password =@Password"
Dim cmd As New SqlCommand(sql, conn) '创建sqlcommand对象
cmd.CommandText = sql '获取sql语句的具体类型
cmd.CommandType = CommandType.Text
cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName))
cmd.Parameters.Add(New SqlParameter("@Password", User.password))
conn.Open() '打开数据连接
reader = cmd.ExecuteReader() '执行查询语句,并生成一个datareader
'读取查询到的数据,并返回给相应的属性
While reader.Read()
'获取数据库中相应字段的数据
eUser.UserName = reader.GetString(0)
eUser.Password = reader.GetString(1)
End While
Return eUser '返回查询到的实体
conn.Close() '关闭连接
End Function
End Class
sqlConnection相当于我们连接数据库的一个通道,而sqlCommand就相当于这个通道的开关,CommandText就是这个通道里可以通过的东西,那么SqlDataReader就是存放这些东西的一个容器。整个D层就是引用实体,然后带着信息进行数据库的连接,最后返回查询到的实体。
本来这些内容是在前面的学习中就要掌握的,但是那时候不是特别理解,迷迷糊糊的,这次三层中看到这些想着必须要弄明白,可能还是说的不够明白,不明白的来问我吧。
本来想好好总结一下.net数据库连接的内容,这两天又重新回顾了一下红皮书,也查了一些资料,但是由于机房重构只是开了一个小头,对于ADO.net还是没有特别明白,机房重构会用到很多这方面的内容,等了解的多了再好好的总结一下,现在感觉还是功夫不到家。