開啟主選單

求真百科

變更

数据访问层

增加 8,513 位元組, 8 個月前
创建页面,内容为“{| class="https://cn.bing.com/images/search?view=detailV2&ccid=9lzYvk29&id=AB22C924FBE2D616A59A2F041ECF5292876000A9&thid=OIP.9lzYvk292eIad2zdCTGhKQHaEd&mediaurl=http…”
{| class="https://cn.bing.com/images/search?view=detailV2&ccid=9lzYvk29&id=AB22C924FBE2D616A59A2F041ECF5292876000A9&thid=OIP.9lzYvk292eIad2zdCTGhKQHaEd&mediaurl=https%3a%2f%2fts1.cn.mm.bing.net%2fth%2fid%2fR-C.f65cd8be4dbdd9e21a776cdd0931a129%3frik%3dqQBgh5JSzx4ELw%26riu%3dhttp%253a%252f%252fimgconvert.csdnimg.cn%252faHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xNjc2OTg0LWEyYmNiNmRmOGYzNzViNGQucG5n%253fx-oss-process%253dimage%252fformat%252cpng%26ehk%3djiz%252bESgjfzO%252fN%252f8KTIJLnr0yx8ZfU6CgVZ2fbIgE4QE%253d%26risl%3d%26pid%3dImgRaw%26r%3d0&exph=555&expw=920&q=%e6%95%b0%e6%8d%ae%e8%ae%bf%e9%97%ae%e5%b1%82&simid=608007279157641914&FORM=IRPRST&ck=623619DCD4DCEAFFEF3C900027F60F5D&selectedIndex=1&itb=0&ajaxhist=0&ajaxserp=0" style="float:right; margin: -10px 0px 10px 20px; text-align:left"
|<center>'''数据访问层'''<br><img
src="https://ts1.cn.mm.bing.net/th/id/R-C.f65cd8be4dbdd9e21a776cdd0931a129?rik=qQBgh5JSzx4ELw&riu=http%3a%2f%2fimgconvert.csdnimg.cn%2faHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8xNjc2OTg0LWEyYmNiNmRmOGYzNzViNGQucG5n%3fx-oss-process%3dimage%2fformat%2cpng&ehk=jiz%2bESgjfzO%2fN%2f8KTIJLnr0yx8ZfU6CgVZ2fbIgE4QE%3d&risl=&pid=ImgRaw&r=0 " width="280"></center><small> 圖片來自优酷</small>
|}
电子与信息技术领域术语
数据库访问层(Data Access Layer)又称为[[DAL层]],有时候也称为是持久层,其功能主要是负责数据库的访问。简单地说就是实现对数据表的Select(查询)、Insert(插入)、Update(更新)、Delete(删除)等操作。如果要加入ORM的思想,就会包括对象和[[数据表]]之间的映射,以及对象实体的持久化操作。

==基本介绍==
在企业级应用中,很少有不与数据库打交道的。只要是用到数据库,就有把业务[[数据持久化]]到数据库的需求。
在项目实际开发过程,有的直接采用JDBC技术进行数据库持久化操作,有的采用目前很好用的[[ORM框架]]来进行数据库持久化操作。

抽取数据库访问层的主要作用是进行隔离,把与数据库打交道的事情都放在数据访问层解决,在服务层则只要调用数据访问层就可以了,不必和具体的ORM层实现相耦合。

数据库访问层:又称为DAL层,有时候也称为是持久层,其功能主要是负责数据库的访问。简单地说就是实现对数据表的Select(查询)、Insert(插入)、Update(更新)、Delete(删除)等操作。如果要加入ORM的思想,就会包括对象和数据表之间的映射,以及对象实体的持久化操作。

讲到数据库访问层,不得不提下三层架构,通常会把[[应用系统]]划分为:表现层、业务逻辑层和数据库访问层。这样的设计目的是为了实现“[[高内聚]],[[低耦合]]”的[[设计思想]]。数据库访问层在三层架构中只负责数据存储与读取。[[业务逻辑层]]作为数据库访问层的上层,[[内部调用]]数据库访问层提供的方法,来完成数据的存储与读取。[[数据库访问层]]与底层数据库应该是独立的,好的数据库访问层方案是能够在不[[修改程序]]代码功能的基础之上实现不同类型数据库的动态切换。我们比较熟悉的做法就是通过XML配置文件来完成底层数据库的切换。目前很多流行的数据库访问层框架都是采用这种方式来实现数据库的动态切换。数据访问层能够将[[应用程序]]中的数据持久化到[[存储介质]]中,通常我们使用的数据库都是关系型的[[数据库]],采用的数据模型都是[[对象模型]],这就需要数据库访问层实现对象模型与[[关系模型]]直接的、互相的转换。 <ref>[[罗果著,企业级Java EE 架构设计精深实践,清华大学出版社,2016.06,第135页]]</ref>

==特点==
三层结构为:

1.表示层(USL):主要表示WEB方式,也可以表示成WINFORM方式。如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

2.业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据[[业务逻辑]]处理。如果说数据层是积木,那逻辑层就是对这些积木的搭建。

3.数据访问层(DAL):主要是对原始数据(数据库或者[[文本文件]]等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供[[数据服务]]。

==设计==
数据访问层DataAccessLayer用于数据库数据的读写操作,该层只包含一个类文件Database.CS。在该类文件中需要创建一些方法以完成建立数据库连接、向数据库提交SQL语句并返回相应的操作结果等功能。

添加类文件

在DataAccessLayer文件夹下添加新项,在“选择新项”对话框中选择模板为“类”给类文件命名为
Database.CS,单击“添加”按钮。

引用命名空间

由于类的代码中要使用ADO.NET相关对象,需要引用以下命名空间:

using System.Data.SqlClient;

类文件结构

将Database类的定义代码放在[[命名空间]]MessageBoard.DataAccessLayer的定义中,付码结构如下:

namespace MessageBoard.DataAccessLayer
{| class="https://cn.bing.com/images/search?view=detailV2&ccid=XyZIoAq0&id=173CAB9EEABB4CE9C13EAFBFCB032DC4FDC33C27&thid=OIP.XyZIoAq0JeHq9musRjC8NgHaGC&mediaurl=https%3a%2f%2fwww.vm888.com%2fd%2ffile%2fzhanchang%2frenwufangtan%2f2019-08-01%2fc38f0b64fa0b53da553d89fa0ec11b24.jpeg&exph=493&expw=604&q=%e6%95%b0%e6%8d%ae%e8%ae%bf%e9%97%ae%e5%b1%82&simid=607996928280502564&FORM=IRPRST&ck=CD9F5C3A06985014E783C816C302CE2B&selectedIndex=86&itb=0&ajaxhist=0&ajaxserp=0" style="float:right; margin: -10px 0px 10px 20px; text-align:left"
|<center>'''数据访问层'''<br><img
src=" https://www.vm888.com/d/file/zhanchang/renwufangtan/2019-08-01/c38f0b64fa0b53da553d89fa0ec11b24.jpeg" width="280"></center><small> 圖片來自优酷</small>
|}
{

public class Database

{

自定义方法()

{ }

}

}

在Database类中添加方法

(1)DBCon()方法

功能:返回SqlConnection对象的数据库连接参数,属于无参函数。代码如下:

public static SqlConnection DBCon()

{

SqlCormection conrl=new SqlConnection(); //创建[[连接对象]]

conn.ConnectionString=“[[seerver]]=;database=db_ExamOnline;user id=sa;pwd=123456”;//建立连接[[字符串]]

retum coma;//返回连接对象

}

也可以用以下方法直接返回数据库连接字符串:

public static SqlConnection DBCon()

{

return new SqlConnection(”server=.;database=db_Message;user id=sa;pwd=123456”);

}

(2)GetDataSet(String)方法

功能:接收传来的SQL语句,执行查询操作,返回查询[[结果集]]。该方法的参数为字符类型,代码如下:

public DataSet GetDataSet(String sql)//形参sql接收传来的SQL语句

{

SqlConnection conn=DBCon0;

//定义一个SqlConnection类对象并得到连接字符串

conn.Open(); //打开数据库连接

Sql[[DataAdapter] adapter = new [[SqlDataAdapter]](sql,conn);

//定义一个SqlDataAdapter类对象,获取SQL命令和连接

DataSet dataset=new DataSet(); //定义一个DataSet类对象

adapter.Fill(dataset); //向数据库提交SQL语句,将查询结果放入dataset中

conn.Close(); //关闭数据库连接

return dataset; //返回查询结果[[数据集]]

}

(3)ExecuteSQL(String)方法

功能:接收传来的SQL语句,执行非查询操作,完成将留言信息写到数据库中的操作。该方法的参数为字符串
类型,代码如下:

public void ExecuteSQL([[string sql]) //形参sql接收传来的[[SQL语句]]

{

SqlConnection conn=DBCon();

//定义一个SqlConnection类对象并得到连接字符串

conn.Open(); //打开数据库连接

SqlCommand cmd=new SqlCommand(sql,coma);

//定义一个SqlDataCommand类对象,获取SQL命令和连接

cmd.ExecuteNonQuery(); //执行一个非查询命令

conn.Close(); //关闭数据库连接

} <ref>[[芦丽萍编著,网络数据库系统开发技术应用,南开大学出版社,2016.03,114-116]]</ref>

'''视频'''

'''数据测试:如何使用 Spring 测试数据访问层组件?'''

[https://www.bilibili.com/video/BV1DY4y127Ue/?p=24哔哩哔哩]

==参考文献==
{{Reflist}}
13,329
次編輯