数据访问层的第一种实现:Access SQL_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:依赖注入机制及IoC的设计与实现
我们设计的分层架构,层与层之间应该是松散耦合的。因为是单向单一调用,所以,这里的“松散耦合”实际是指上层类不能具体依赖于下层类,而应该依赖于下层提供的一个接口。这样,上层

经过上面篇文章的介绍,整个系统的框架算是基本搭建完了,下面,我们要具体实现各个层次。关于数据访问层的实现,我准备讨论三种实现方式,这一篇文章讨论第一种:Access 动态生成SQL。

顾名思义,这种实现将使用Access作为后台数据库,而操作方式也是最基本的使用SQL命令。

在具体编写实现代码之前,我们需要做一些准备工作:

第一步,我们要将Access数据库搭建完成,具体做法如下。

在Web工程下新建一个文件夹,命名为AccessData,并在其中新建一个mdb文件(即Access数据库文件),按照前面介绍过的数据库设计构架,将数据表及表间关系建好,这里不再赘述。

第二步,我们要进行一些配置。

打开Web工程下的Web.config文件,在其中的appSettings节点下,添加如下键值:

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

第一条为Access的连接字符串,第二条为Access数据库文件的路径,其中“~”表示网站根目录。

第三步,新建一个工程。

我们要新建一个工程AccessDAL,用来存放Access数据访问层的代码。

准备工作做完了,现在来实现具体的代码。

1.编写数据访问助手类

因为很多数据访问操作流程很相似,所以,这里将一些可复用的代码抽取出来,编写成助手类,以此减少代码量,提高代码复用性。

这个助手类放在AccessDAL下,叫AccessDALHelper,主要负责Access数据库的访问。它包括三个方法:

GetConnectionString:从配置文件中读取配置项,组合成连接字符串。

ExecuteSQLNonQuery:执行指定SQL语句,不返回任何值,一般用于Insert,Delete,Update命令。

ExecuteSQLDataReader:执行SQL语句返回查询结果,一般用于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数据库操作助手
/// </summary>
public sealed class AccessDALHelper
{
/**//// <summary>
/// 读取Access数据库的连接字符串
/// 首先从缓存里读取,如果不存在则到配置文件中读取,并放入缓存
/// </summary>
/// <returns>Access数据库的连接字符串</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>
/// 执行SQL语句并且不返回任何值
/// </summary>
/// <param name="SQLCommand">所执行的SQL命令</param>
/// <param name="parameters">参数集合</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>
/// 执行SQL语句并返回包含查询结果的DataReader
/// </summary>
/// <param name="SQLCommand">所执行的SQL命令</param>
/// <param name="parameters">参数集合</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开发经验总结和收集
一:页面中Page_Load事件 和 Page.IsPostBack执行两次的原因. 原因一: 当<%@Page....中没有AutoEventWireup定义时会导致Page_Load执行两次,如果有定义,且值为true时,在IsPostBack中动态

共2页上一页12下一页
来源:模板无忧//所属分类:.Net教程/更新时间:2008-08-22
相关.Net教程