数据访问层的第一种实现:Access+SQL

2008-06-25 06:54:17来源: 阅读 ()

新老客户大回馈,云服务器低至5折

经过上面篇文章的介绍,整个系统的框架算是基本搭建完了,下面,我们要具体实现各个层次。关于数据访问层的实现,我准备讨论三种实现方式,这一篇文章讨论第一种: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;
        }
    }
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:超简单实现 .NET开发类似Web Parts的功能

下一篇:依赖注入机制及IoC的设计与实现