基本介紹
在企業級套用中,很少有不與資料庫打交道的。只要是用到資料庫,就有把業務數據持久化到資料庫的需求。
在項目實際開發過程,有的直接採用JDBC技術進行資料庫持久化操作,有的採用目前很好用的ORM框架來進行資料庫持久化操作。
抽取資料庫訪問層的主要作用是進行隔離,把與資料庫打交道的事情都放在數據訪問層解決,在服務層則只要調用數據訪問層就可以了,不必和具體的ORM層實現相耦合。
資料庫訪問層:又稱為DAL層,有時候也稱為是持久層,其功能主要是負責資料庫的訪問。簡單地說就是實現對數據表的Select(查詢)、Insert(插入)、Update(更新)、Delete(刪除)等操作。如果要加入ORM的思想,就會包括對象和數據表之間的映射,以及對象實體的持久化操作。
講到資料庫訪問層,不得不提下三層架構,通常會把套用系統劃分為:表現層、業務邏輯層和資料庫訪問層。這樣的設計目的是為了實現“高內聚,低耦合”的設計思想。資料庫訪問層在三層架構中只負責數據存儲與讀取。業務邏輯層作為資料庫訪問層的上層,內部調用資料庫訪問層提供的方法,來完成數據的存儲與讀取。資料庫訪問層與底層資料庫應該是獨立的,好的資料庫訪問層方案是能夠在不修改程式代碼功能的基礎之上實現不同類型資料庫的動態切換。我們比較熟悉的做法就是通過XML配置檔案來完成底層資料庫的切換。目前很多流行的資料庫訪問層框架都是採用這種方式來實現資料庫的動態切換。數據訪問層能夠將應用程式中的數據持久化到存儲介質中,通常我們使用的資料庫都是關係型的資料庫,採用的數據模型都是對象模型,這就需要資料庫訪問層實現對象模型與關係模型直接的、互相的轉換。
特點
三層結構為:
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
{
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(); //打開資料庫連線
SqlDataAdapter 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(); //關閉資料庫連線
}