.net 创建数据层接口

    刚开始只知道,怎样定义一个接口,怎样实现接口,却不知道怎样调用接口中的方法.今天就尝试着自己去写了一个创建数据层接口的示例:

    首先,我们定义一个数据访问层类:

using System;
using System.Data;
using System.Data.OracleClient;
using IDal;

namespace OracleDal
{
    public partial class Query :IQuery
    {
        public Query()
        { }
        public DataTable GetTable()
        {
            string connStr=System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();

            using(OracleConnection connection = new OracleConnection(connStr))
            {
                DataTable dt = new DataTable();
                try
                {
                    connection.Open();
                    OracleDataAdapter da = new OracleDataAdapter("SELECT g.goods_name, g.goods_no FROM goods g" , connection);
                    da.Fill(dt);
                }
                catch(System.Data.OracleClient.OracleException ex)
                {
                    throw new Exception(ex.Message);
                }
                return dt;
            }
        }
    }
}

定义的接口如下:

using System.Data;

namespace IDal
{
    public interface IQuery
    {
        DataTable GetTable();
    }
}

业务逻辑层如下:

using System.Data;
using DataAccess;

namespace Bll
{
    public class Query
    {
        private readonly IDal.IQuery dal=DataAccessCreate.CreateIQuery();

        public DataTable GetTable()
        {
            return dal.GetTable();
        }
    }
}

创建的展示页面如下:(div+css控制样式)


    <div>
        <ul>
            <asp:Repeater ID="rptList" runat="server">
                <ItemTemplate>
                    <li>
                        <%#Eval("goods_name")%></li>
                    <li>
                        <%#Eval("goods_no")%></li>
                </ItemTemplate>
            </asp:Repeater>
        </ul>
    </div>

 


下面则是创建数据层接口:


using System.Configuration;
using System.Reflection;
using System.Web;

namespace DataAccess
{
  public class DataAccessCreate
    {
        private static readonly string AssemblyPath = ConfigurationManager.AppSettings["DAL"];
        public DataAccessCreate()
        { }
       //不使用缓存
        private static object CreateObjectNoCache(string AssemblyPath , string classNamespace)
        {

            try
            {
                object objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);
                return objType;
            }
            catch(System.Exception ex)
            {
                string str=ex.Message;// 记录错误日志
                return null;
            }

        }
        //使用缓存
        private static object CreateObject(string AssemblyPath , string classNamespace)
        {
            System.Web.Caching.Cache objCache = HttpRuntime.Cache;
            object objType = objCache[classNamespace];
            if(objType == null)
            {
                try
                {
                    objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace);
                    objCache.Insert(classNamespace , objType);// 写入缓存
                }
                catch(System.Exception ex)
                {
                    string str=ex.Message;// 记录错误日志
                }
            }
            return objType;
        }

        /// <summary>
        /// 创建Query数据层接口。
        /// </summary>
        public static IDal.IQuery CreateIQuery()
        {

            string ClassNamespace = AssemblyPath + ".Query";
            object objType=CreateObject(AssemblyPath , ClassNamespace);
            return (IDal.IQuery)objType;
        }

    }
}

WebConfig配置如下:

 <appSettings>
    <add key="DAL" value="OracleDal"/>
  </appSettings>

value值为数据访问层类的名称空间.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值