强大的数据访问助手——ADO.NET

机房重构在敲了一条简单的登录线之后,对于“三层”理解突然感觉通了一窍。其实仔细想想也挺有意思的,每个层各司其职,通过一层调用一层来产生信息的传递。Model就像是三层之间通信的使者,很好的封装了数据,使数据在三层之间更方便的传输。要说起数据的处理,增删改查就统统包括了,其DAL层中就是定义了这四个主要的函数,ADO.NET作为强大的数据访问助手,给DAL层省了不少事情。


还记得VB当中,为了访问数据我们使用的ADO对象么?有了新朋友,可不能忘了老朋友。ADO.NET的名称就是来源于ADO,ADO是用在以往的Microsoft技术中访问数据,那为什么升级之后名字多了一个“.NET”呢??那是因为Microsoft希望表明,这是在NET编程环境中优化使用的数据访问接口。



一、理论学习(对比ADO)


回顾着ADO,让我们认识一下ADO.NET。


1、COM VS NET

ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。众所周知.NET体系不同于COM体系,ADO.NET接口也就完全不同于ADO和OLE DB接口,这也就是说ADO.NET和ADO是两种数据访问方式。


2、在线运作 VS 离线运作

ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线。这样就大大提高了我们数据库的安全,也会提高性能。


3、主要对象的对比


ADO ADO.NET
Connection Connection
Command Command

DataAdaper

DataReader
RecordSet DataSet

(1)先看,前两个一样的对象:Connection代表打开或关闭数据源,Command用来传送命令。

(2)再看,最后这行,两个功能相似的对象:Recordset(ADO)是一个连接或断开的(通过使用游标)的记录集合,被定义成数据表。DataSet(ADO.NET)是一个断开的记录集合,它可以作为在内存中使用的数据集。

(3)最后看,ADO.NET升级后的新对象。因为.NET的离线访问方式,于是就出现DataAdaper对象,用来充当DataSet和数据源之间用于检索和保存数据的桥梁。DataReader是一个简单的数据集,检索的数据只能读取,不能修改。对于ADO.NET这几个对象,看了下面这张图,你会更加清楚他们之间是如何协调工作的。






二、代码实现



看完了ADO.NET类的介绍,我们就利用这几个对象,编一个DAL层,看看它访问数据库的过程。

Imports System.Data
Imports System.Data.SqlClient
Imports Login.Model

Public Class DALUser

    Public Function SelectUser(ByVal user As ModelUser) As ModelUser
        '函数功能:从user表中查信息,并以User实体返回数据库中的数据
        Dim conn As SqlConnection = New SqlConnection(Util.connstring())  '数据库连接的字符串
        Dim cmd As New SqlCommand     '定义一个命令对象
        cmd.Connection = conn         '发送命令前,先取得连接的字符串

        cmd.CommandText = "Select * From User_Info Where UserID=@ID and PWD=@Password"  '查询实体中(UI层传入的数据)的这条记录
        cmd.Parameters.Add(New SqlParameter("@ID",user.ID))   '设置参数
        cmd.Parameters.Add(New SqlParameter("@Password",user.Password))  '设置参数
        cmd.CommandType = CommandType.Text    'COMMAND命令的属性设置为SQL语句
        conn.Open()                     '打开连接

        Dim reader As SqlClient.SqlDataReader    '定义数据集对象
        reader = cmd.ExecuteReader()      '执行查询操作,返回多行多列结果(如果有记录就要返回给loginuser实体对象)

        Dim loginuser As New ModelUser     '把Userinfo表信息实例化

        Try
            While (reader.Read())  '循环的条件是:记录存在。
                loginuser.ID = reader.GetInt32(0)
                loginuser.Password = reader.GetString(reader.GetOrdinal("PWD"))
                loginuser.level = reader.GetString(reader.GetOrdinal("level"))

            End While
        Catch ex As Exception
        Finally
            If Not IsNothing(conn) Then
                conn.Close()
            End If

        End Try
        Return loginuser  '把从Reader中取得数据返回到BLL层进行逻辑判断。

    End Function

End Class

三、小结


其实对于ADO.NET我们一点也不陌生,.NET平台为我们写好了很多的类,进行了打包和封装的工作。形成了类库,我们就用现成的就可以了。给我们带来了很多的方便。看来面向对象的语言就是比面向过程的语言简单。

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...