日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

數(shù)據(jù)訪問層的第一種實(shí)現(xiàn):Access SQL_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:依賴注入機(jī)制及IoC的設(shè)計(jì)與實(shí)現(xiàn)
我們設(shè)計(jì)的分層架構(gòu),層與層之間應(yīng)該是松散耦合的。因?yàn)槭菃蜗騿我徽{(diào)用,所以,這里的“松散耦合”實(shí)際是指上層類不能具體依賴于下層類,而應(yīng)該依賴于下層提供的一個接口。這樣,上層

經(jīng)過上面篇文章的介紹,整個系統(tǒng)的框架算是基本搭建完了,下面,我們要具體實(shí)現(xiàn)各個層次。關(guān)于數(shù)據(jù)訪問層的實(shí)現(xiàn),我準(zhǔn)備討論三種實(shí)現(xiàn)方式,這一篇文章討論第一種:Access 動態(tài)生成SQL。

顧名思義,這種實(shí)現(xiàn)將使用Access作為后臺數(shù)據(jù)庫,而操作方式也是最基本的使用SQL命令。

在具體編寫實(shí)現(xiàn)代碼之前,我們需要做一些準(zhǔn)備工作:

第一步,我們要將Access數(shù)據(jù)庫搭建完成,具體做法如下。

在Web工程下新建一個文件夾,命名為AccessData,并在其中新建一個mdb文件(即Access數(shù)據(jù)庫文件),按照前面介紹過的數(shù)據(jù)庫設(shè)計(jì)構(gòu)架,將數(shù)據(jù)表及表間關(guān)系建好,這里不再贅述。

第二步,我們要進(jìn)行一些配置。

打開Web工程下的Web.config文件,在其中的appSettings節(jié)點(diǎn)下,添加如下鍵值:

<add key="AccessConnectionString" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={DBPath}"/>
<add key="AccessPath" value="~/AccessData/AccessDatabase.mdb"/>

第一條為Access的連接字符串,第二條為Access數(shù)據(jù)庫文件的路徑,其中“~”表示網(wǎng)站根目錄。

第三步,新建一個工程。

我們要新建一個工程AccessDAL,用來存放Access數(shù)據(jù)訪問層的代碼。

準(zhǔn)備工作做完了,現(xiàn)在來實(shí)現(xiàn)具體的代碼。

1.編寫數(shù)據(jù)訪問助手類

因?yàn)楹芏鄶?shù)據(jù)訪問操作流程很相似,所以,這里將一些可復(fù)用的代碼抽取出來,編寫成助手類,以此減少代碼量,提高代碼復(fù)用性。

這個助手類放在AccessDAL下,叫AccessDALHelper,主要負(fù)責(zé)Access數(shù)據(jù)庫的訪問。它包括三個方法:

GetConnectionString:從配置文件中讀取配置項(xiàng),組合成連接字符串。

ExecuteSQLNonQuery:執(zhí)行指定SQL語句,不返回任何值,一般用于Insert,Delete,Update命令。

ExecuteSQLDataReader:執(zhí)行SQL語句返回查詢結(jié)果,一般用于Select命令。

具體代碼如下:

using System;
using System.Web;
using System.Web.Caching;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using NGuestBook.Utility;

namespace NGuestBook.AccessDAL
{
/**//// <summary>
/// Access數(shù)據(jù)庫操作助手
/// </summary>
public sealed class AccessDALHelper
{
/**//// <summary>
/// 讀取Access數(shù)據(jù)庫的連接字符串
/// 首先從緩存里讀取,如果不存在則到配置文件中讀取,并放入緩存
/// </summary>
/// <returns>Access數(shù)據(jù)庫的連接字符串</returns>
private static string GetConnectionString()
{
if (CacheAccess.GetFromCache("AccessConnectionString") != null)
{
return CacheAccess.GetFromCache("AccessConnectionString").ToString();
}
else
{
string dbPath = ConfigurationManager.AppSettings["AccessPath"];
string dbAbsolutePath = HttpContext.Current.Server.MapPath(dbPath);
string connectionString = ConfigurationManager.AppSettings["AccessConnectionString"];

CacheDependency fileDependency = new CacheDependency(HttpContext.Current.Server.MapPath("Web.Config"));
CacheAccess.SaveToCache("AccessConnectionString", connectionString.Replace("{DBPath}", dbAbsolutePath), fileDependency);

return connectionString.Replace("{DBPath}", dbAbsolutePath);
}
}

/**//// <summary>
/// 執(zhí)行SQL語句并且不返回任何值
/// </summary>
/// <param name="SQLCommand">所執(zhí)行的SQL命令</param>
/// <param name="parameters">參數(shù)集合</param>
public static void ExecuteSQLNonQuery(string SQLCommand,OleDbParameter[] parameters)
{
OleDbConnection connection = new OleDbConnection(GetConnectionString());
OleDbCommand command = new OleDbCommand(SQLCommand, connection);

for (int i = 0; i < parameters.Length; i )
{
command.Parameters.Add(parameters[i]);
}

connection.Open();
command.ExecuteNonQuery();
connection.Close();
}

/**//// <summary>
/// 執(zhí)行SQL語句并返回包含查詢結(jié)果的DataReader
/// </summary>
/// <param name="SQLCommand">所執(zhí)行的SQL命令</param>
/// <param name="parameters">參數(shù)集合</param>
/// <returns></returns>
public static OleDbDataReader ExecuteSQLDataReader(string SQLCommand,OleDbParameter[] parameters)
{
OleDbConnection connection = new OleDbConnection(GetConnectionString());
OleDbCommand command = new OleDbCommand(SQLCommand, connection);

for (int i = 0; i < parameters.Length; i )
{
command.Parameters.Add(parameters[i]);
}

connection.Open();
OleDbDataReader dataReader = command.ExecuteReader();
//connection.Close();

return dataReader;
}
}
}

分享:近期的幾個ASP.NET開發(fā)經(jīng)驗(yàn)總結(jié)和收集
一:頁面中Page_Load事件 和 Page.IsPostBack執(zhí)行兩次的原因. 原因一: 當(dāng)<%@Page....中沒有AutoEventWireup定義時(shí)會導(dǎo)致Page_Load執(zhí)行兩次,如果有定義,且值為true時(shí),在IsPostBack中動態(tài)

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程