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

来源:互联网 发布:蜘蛛池平台源码 编辑:程序博客网 时间:2024/05/29 14:52

        机房重构在敲了一条简单的登录线之后,对于“三层”理解突然感觉通了一窍。其实仔细想想也挺有意思的,每个层各司其职,通过一层调用一层来产生信息的传递。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.NETConnectionConnectionCommandCommand
DataAdaper
DataReaderRecordSetDataSet


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

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

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






    二、代码实现



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

Imports System.DataImports System.Data.SqlClientImports Login.ModelPublic 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 FunctionEnd Class

    三、小结


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



1 0