精华内容
下载资源
问答
  • Ctrip DAL是携程框架部开发的数据库访问框架,支持代码生成和水平扩展。其由携程技术中心框架部DAL团队开发,历经3年不断打磨,并在长期的实际使用中基于大量的用户反馈不断优化。 开源范围包括代码生成器,Java...
  • 在.NET中 DAL+IDAL+Model+BLL+Web是什么意思 http://hi.baidu.com/hexiaojian/item/8d0c1a8e648546d75e0ec1e7 其实三层架构是一个程序最基本的在.Net开发中通常是多层开发比如说BLL就是business Logic laywer...

    在.NET中 DAL+IDAL+Model+BLL+Web是什么意思

    http://hi.baidu.com/hexiaojian/item/8d0c1a8e648546d75e0ec1e7

    其实三层架构是一个程序最基本的 在.Net开发中通常是多层开发
    比如说
    BLL 就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后传递给 客户程序也就是UI
    DAL就是(data access laywer)数据访问层 ,负责 对实体也就是数据库相应表的增删改查
    IDAL它体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现。抽象的接口模块(IDAL)
    Model: 实体层数据库中表的映射,一般有几个表就有几个实体类
    DBUtility: 数据库应用层
    common:常用处理组件层
    web:(Web)网站项目

    在程序中调用BLL,BLL中调用DAL

    创建方法:

    菜单-》文件-》新增-》新建项目

    然后可以选择建立一个类库,也就是BLL,DAL。

    如果要新建网站的话同理。

    建立之后可以在一个项目中引用某个类库,注意引用顺序。引用完成后就可以查看项目依赖项的依赖关系了

     

    ASP.NET里的三层架构给我的感觉类似于J2EE里的MVC模式
    也就是把结构分层为
    Model层(负责与后台数据通信一般用LINQ)
    View层(负责前台的表现)
    Control层(负责业务逻辑的处理).

    可是我这么分析的对么?
    我想使用三层架构的模式做一个自己的网站.该怎么下手?
    有没有人愿意通俗得给我讲解一下
    当然,如果你的答案让我满意,会有追加的高分赠送哦!

     

     

    既然是三层,肯定在物理逻辑上就要进行区分的,因此在项目文件夹下,有WebUI、BLL、DAL、Common这四个文件夹和Default.aspx等首页文件,其实最主要的就是前三个文件夹,Common文件夹里保存了一些样式文件和JS文件,个人感觉这些文件可以放到WebUI里的。o(∩_∩)o...,这几个文件夹用来作什么应该从命名上能看出来吧?WebUI用来保存页面文件,也就是大家在浏览网页的时候能看见的,最直观的,也是这三层中最简单的;BLL用来保存业务逻辑,起到一个承上启下的作用,用来连接WebUI层和DAL层,主要是定义一些方法,相对来讲比WebUI要复杂;DAL文件夹主要是保存对数据库操作的一些文件,主要是对一些SQL语句(存储过程)的执行。这三层之间的关系是上层引用下层,即WebUI引用BLL,BLL引用DLL。这三层联系起来就是这样一个过程:在页面添加一些信息经过合理性判断(WebUI)后调用BLL层的函数(方法)。


    三、各层间的访问过程

    1、传入值,将值进行类型转换(为整型)。

    2、创建BLL层的content.cs对象c,通过对象c访问BLL层的方法GetContentInfo(ID)调用BLL层。

    3、BLL层方法GetContentInfo(ID)中取得数据访问层SQLServerDAL的实例,实例化IDAL层的接口对象dal,这个对象是由工厂层DALFactory创建的,然后返回IDAL层传入值所查找的内容的方法dal.GetContentInfo(id)。

    4、数据工厂通过web.config配置文件中给定的webdal字串访问SQLServerDAL层,返回一个完整的调用SQLServerDAL层的路径给BLL层。

    5、到此要调用SQLServerDAL层,SQLServerDAL层完成赋值Model层的对象值为空,给定一个参数,调用SQLServerDAL层的SqlHelper的ExecuteReader方法,读出每个字段的数据赋值给以定义为空的Model层的对象。

    6、SqlHelper执行sql命令,返回一个指定连接的数据库记录集,在这里需要引用参数类型,提供为打开连接命令执行做好准备PrepareCommand。

    7、返回Model层把查询得到的一行记录值赋值给SQLServerDAL层的引入的Model层的对象ci,然后把这个对象返回给BLL。

    8、回到Web层的BLL层的方法调用,把得到的对象值赋值给Lable标签,在前台显示给界面

     

     

    实现步骤过程

    1、创建Model,实现业务实体。

    2、创建IDAL,实现接口。

    3、创建SQLServerDAL,实现接口里的方法。

    4、增加web.config里的配置信息,为SQLServerDAL的程序集。

    5、创建DALFactory,返回程序集的指定类的实例。

    6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。

    7、创建WEB,调用BLL里的数据操作方法。

    注意:

    1、web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。

    2、DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。

    3、项目创建后,注意修改各项目的默认命名空间和程序集名称。

    4、注意修改解决方案里的项目依赖。

    5、注意在解决方案里增加各项目引用。

    转载于:https://www.cnblogs.com/cosmoseeker/p/3592404.html

    展开全文
  • 1.sqlhelper? 2.nhibernate? 3.linq? 我还是个菜鸟,我们公司用得sqlhelper,而且改过ConnectionString.、 现在我存在一个疑问,用一次sqlhelper,就要连一次数据库,那不是性能很低吗?
  • 其实三层架构一个程序最基本的 在.Net开发中通常多层开发比如说BLL 就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后传递给 客户程序也就是UIDAL就是(data access ...

    其实三层架构是一个程序最基本的 .Net开发中通常是多层开发
    比如说
    BLL 
    就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后传递给 客户程序也就是UI
    DAL
    就是(data access laywer)数据访问层 ,负责 对实体也就是数据库相应表的增删改查
    IDAL
    它体现了抽象的精神,或者说是面向接口编程的最佳体现。抽象的接口模块(IDAL)
    Model: 
    实体层数据库中表的映射,一般有几个表就有几个实体类
    DBUtility: 
    数据库应用层
    common
    :常用处理组件层
    web
    :(Web)网站项目

    在程序中调用BLLBLL中调用DAL

    创建方法:

    菜单-》文件-》新增-》新建项目

    然后可以选择建立一个类库,也就是BLLDAL

    如果要新建网站的话同理。

    建立之后可以在一个项目中引用某个类库,注意引用顺序。引用完成后就可以查看项目依赖项的依赖关系了

     

    ASP.NET里的三层架构给我的感觉类似于J2EE里的MVC模式
    也就是把结构分层为
    Model
    (负责与后台数据通信一般用LINQ)
    View
    (负责前台的表现)
    Control
    (负责业务逻辑的处理).

    可是我这么分析的对么?
    我想使用三层架构的模式做一个自己的网站.该怎么下手?
    有没有人愿意通俗得给我讲解一下
    当然,如果你的答案让我满意,会有追加的高分赠送哦!

     

     

    既然是三层,肯定在物理逻辑上就要进行区分的,因此在项目文件夹下,有WebUIBLLDALCommon这四个文件夹和Default.aspx等首页文件,其实最主要的就是前三个文件夹,Common文件夹里保存了一些样式文件和JS文件,个人感觉这些文件可以放到WebUI里的。o(∩_∩)o...,这几个文件夹用来作什么应该从命名上能看出来吧?WebUI用来保存页面文件,也就是大家在浏览网页的时候能看见的,最直观的,也是这三层中最简单的;BLL用来保存业务逻辑,起到一个承上启下的作用,用来连接WebUI层和DAL层,主要是定义一些方法,相对来讲比WebUI要复杂;DAL文件夹主要是保存对数据库操作的一些文件,主要是对一些SQL语句(存储过程)的执行。这三层之间的关系是上层引用下层,即WebUI引用BLLBLL引用DLL。这三层联系起来就是这样一个过程:在页面添加一些信息经过合理性判断(WebUI)后调用BLL层的函数(方法)。


    三、各层间的访问过程

    1
    、传入值,将值进行类型转换(为整型)

    2
    、创建BLL层的content.cs对象c,通过对象c访问BLL层的方法GetContentInfo(ID)调用BLL层。

    3
    BLL层方法GetContentInfo(ID)中取得数据访问层SQLServerDAL的实例,实例化IDAL层的接口对象dal,这个对象是由工厂层DALFactory创建的,然后返回IDAL层传入值所查找的内容的方法dal.GetContentInfo(id)

    4
    、数据工厂通过web.config配置文件中给定的webdal字串访问SQLServerDAL层,返回一个完整的调用SQLServerDAL层的路径给BLL层。

    5
    、到此要调用SQLServerDAL层,SQLServerDAL层完成赋值Model层的对象值为空,给定一个参数,调用SQLServerDAL层的SqlHelperExecuteReader方法,读出每个字段的数据赋值给以定义为空的Model层的对象。

    6
    SqlHelper执行sql命令,返回一个指定连接的数据库记录集,在这里需要引用参数类型,提供为打开连接命令执行做好准备PrepareCommand

    7
    、返回Model层把查询得到的一行记录值赋值给SQLServerDAL层的引入的Model层的对象ci,然后把这个对象返回给BLL

    8
    、回到Web层的BLL层的方法调用,把得到的对象值赋值给Lable标签,在前台显示给界面

     

     

    实现步骤过程

    1
    、创建Model,实现业务实体。

    2
    、创建IDAL,实现接口。

    3
    、创建SQLServerDAL,实现接口里的方法。

    4
    、增加web.config里的配置信息,为SQLServerDAL的程序集。

    5
    、创建DALFactory,返回程序集的指定类的实例。

    6
    、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。

    7
    、创建WEB,调用BLL里的数据操作方法。

    注意:

    1
    web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。

    2
    DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。

    3
    、项目创建后,注意修改各项目的默认命名空间和程序集名称。

    4
    、注意修改解决方案里的项目依赖。

    5
    、注意在解决方案里增加各项目引用。

    展开全文
  • 采用什么样的数据访问形式软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的对未来程序维护,功能扩展起到至关重要的作用。当然良好的设计模式可以为我们提供很多的...

    采用什么样的数据访问形式是软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的是对未来程序维护,功能扩展起到至关重要的作用。当然良好的设计模式可以为我们提供很多的选择,但面对实际问题,公司规模小考虑成本,资金投入少,软件逻辑不算复杂,功能较少,部分客户需求只需要单个功能模块,类似小型管理系统,门户网站,crm等,这也为众多IT人事提供了兼职的好机会。借鉴类似程序,cpy下部分代码,小修小改下数据库字段新的软件就大功告成。这种现状在弊端同时也很多程序没有通过完整的测试,部分存在漏洞,维护性不高,导致客户日常投诉反工现象时有发生,弄不好还会引起不必要的麻烦,为此组件一个高效便捷的快速开发框架,集成我们日常生活中的经验是十分有必要的。

    这里我就结合几个项目中用到的简单的数据访问层简单和大家共同的学习探讨。

    1、常用数据访问我们一般采用的都有:微软自带DBHelper

    2、Enterprises Library微软企业库(Microsoft.Practices.EnterpriseLibrary.Common,Microsoft.Practices.EnterpriseLibrary.Data,Microsoft.Practices.ObjectBuilder)

    3、这里我和大家共同探讨结合微软DBHelper的自定义的加强版SqlDataProvider.cs

    数据库访问抽象类DataProvider.cs

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Data.SqlClient;
     6 using System.Configuration;
     7 using System.Data;
     8 using System.Reflection;
     9 using System.Data.OleDb;
    10 namespace DAL
    11 {
    12     ///<summary>
    13 /// 数据库访问抽象类
    14 ///</summary>
    15     public abstract class DataProvider
    16     {
    17         private static DataProvider _instance = null;
    18         public static DataProvider Instance
    19         {
    20             get
    21             {
    22                 if (_instance == null)
    23                 {
    24                     String strConnectionString = ConfigurationManager.ConnectionStrings["ConnnectionString"].ConnectionString;
    25 
    26                     String strConnectionType = ConfigurationManager.ConnectionStrings["ConnectionType"].ConnectionString;
    27                     if (strConnectionType.ToLower() == "sqlclient")
    28                     {
    29                         strConnectionType = "DAL.SqlDataProvider, DAL";
    30                     }
    31 
    32                     Type t = Type.GetType(strConnectionType);
    33                     Type[] paramTypes = new Type[1];
    34                     paramTypes[0] = typeof(String);
    35 
    36                     Object[] paramArray = new Object[1];
    37                     paramArray[0] = strConnectionString;
    38 
    39                     _instance = (DataProvider)((ConstructorInfo)t.GetConstructor(paramTypes)).Invoke(paramArray);
    40                 }
    41                 return _instance;
    42             }
    43         }
    44 
    45         #region 抽象属性和方法
    46 
    47         #region 数据库链接串
    48         public abstract String ConnectionString { get; }
    49         #endregion
    50 
    51         #region 执行SQL语句
    52         public abstract Object GetScalar(String selectSql);
    53         public abstract DataSet GetDataset(String selectSql);
    54         public virtual DataSet GetDatasetTrans(SqlTransaction trans, String selectSql) { return null; }
    55         public virtual DataSet GetDatasetTrans(OleDbTransaction trans, String selectSql) { return null; }
    56         public virtual DataSet GetDataset(String selectSql, SqlParameter[] para) { return null; }
    57         public virtual DataSet GetDataset(String selectSql, OleDbParameter[] para) { return null; }
    58         public virtual DataSet GetDatasetTrans(SqlTransaction trans, String selectSql, SqlParameter[] para) { return null; }
    59         public virtual DataSet GetDatasetTrans(OleDbTransaction trans, String selectSql, OleDbParameter[] para) { return null; }
    60         public abstract void Execute(String noneQuery);
    61         public virtual void Execute(String noneQuery, SqlParameter[] para) { }
    62         public virtual void Execute(String noneQuery, OleDbParameter[] para) { }
    63         public abstract IDataReader GetReader(String selectSql);
    64         public virtual IDataReader GetReaderTrans(SqlTransaction trans, String selectSql) { return null; }
    65         public virtual IDataReader GetReaderTrans(OleDbTransaction trans, String selectSql) { return null; }
    66         public virtual IDataReader GetReader(String selectSql, SqlParameter[] para) { return null; }
    67         public virtual IDataReader GetReader(String selectSql, OleDbParameter[] para) { return null; }
    68         public virtual IDataReader GetReaderTrans(SqlTransaction trans, String selectSql, SqlParameter[] para) { return null; }
    69         public virtual IDataReader GetReaderTrans(OleDbTransaction trans, String selectSql, OleDbParameter[] para) { return null; }
    70         #endregion
    71 
    72         #region 执行存储过程
    73         public abstract void ExecuteSp(String spName);
    74         public virtual void ExecuteSp(SqlTransaction trans, String spName) { }
    75         public virtual void ExecuteSp(OleDbTransaction trans, String spName) { }
    76         public virtual void ExecuteSp(String spName, SqlParameter[] para) { }
    77         public virtual void ExecuteSp(String spName, OleDbParameter[] para) { }
    78         public virtual void ExecuteSp(SqlTransaction trans, String spName, SqlParameter[] para) { }
    79         public virtual void ExecuteSp(OleDbTransaction trans, String spName, OleDbParameter[] para) { }
    80         public abstract IDataReader GetReaderBySp(String spName);
    81         public virtual IDataReader GetReaderBySp(String spName, SqlParameter[] para) { return null; }
    82         public virtual IDataReader GetReaderBySp(String spName, OleDbParameter[] para) { return null; }
    83         public abstract Object GetScalarBySp(String spName);
    84         public virtual Object GetScalarBySp(String spName, SqlParameter[] para) { return null; }
    85         public virtual Object GetScalarBySp(String spName, OleDbParameter[] para) { return null; }
    86         public abstract DataSet GetDatasetBySp(String spName);
    87         public virtual DataSet GetDatasetBySp(String spName, SqlParameter[] para) { return null; }
    88         public virtual DataSet GetDatasetBySp(String spName, OleDbParameter[] para) { return null; }
    89         #endregion
    90 
    91         #endregion
    92     }
    93 }
    

      


    继承类SqlDataProvider:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Data;
      6 using System.Data.SqlClient;
      7 namespace DAL
      8 {
      9     public class SqlDataProvider : DataProvider
     10     {
     11         private String _connectionString = String.Empty;
     12 
     13         public SqlDataProvider(String connString)
     14         {
     15             _connectionString = connString;
     16         }
     17 
     18         #region 实现抽象方法
     19 
     20         #region 数据库链接串
     21         public override String ConnectionString
     22         {
     23             get
     24             {
     25                 return _connectionString;
     26             }
     27         }
     28 
     29         #endregion
     30 
     31         #region 执行SQL语句
     32 
     33         ///<summary>
     34 /// 执行查询获取单值
     35 ///</summary>
     36 ///<param name="selectSql">查询语句</param>
     37 ///<returns>返回Object</returns>
     38         public override Object GetScalar(String selectSql)
     39         {
     40             return SqlHelper.ExecuteScalar(_connectionString,
     41                 CommandType.Text, selectSql);
     42         }
     43 
     44         ///<summary>
     45 /// 根据查询语句获取数据集
     46 ///</summary>
     47 ///<param name="selectSql">查询语句</param>
     48 ///<returns>返回数据集</returns>
     49         public override DataSet GetDataset(String selectSql)
     50         {
     51             if (selectSql == null) throw new ArgumentNullException("selectSql");
     52 
     53             DataSet ds = new DataSet();
     54             SqlHelper.FillDataset(_connectionString, CommandType.Text, selectSql, ds, null);
     55             return ds;
     56         }
     57 
     58         ///<summary>
     59 /// 根据查询语句获取数据集
     60 ///</summary>
     61 ///<param name="trans">事务</param>
     62 ///<param name="selectSql">查询语句</param>
     63 ///<returns>返回数据集</returns>
     64         public override DataSet GetDatasetTrans(SqlTransaction trans, String selectSql)
     65         {
     66             if (selectSql == null) throw new ArgumentNullException("selectSql");
     67 
     68             DataSet ds = new DataSet();
     69             SqlHelper.FillDataset(trans, CommandType.Text, selectSql, ds, null);
     70             return ds;
     71         }
     72 
     73         ///<summary>
     74 /// 根据带参数的查询语句获取数据集
     75 ///</summary>
     76 ///<param name="selectSql">查询语句</param>
     77 ///<param name="para">参数列表</param>
     78 ///<returns>返回数据集</returns>
     79         public override DataSet GetDataset(String selectSql, SqlParameter[] para)
     80         {
     81             if (selectSql == null) throw new ArgumentNullException("selectSql");
     82             if (para == null) throw new ArgumentNullException("para");
     83 
     84             DataSet ds = new DataSet();
     85             SqlHelper.FillDataset(_connectionString, CommandType.Text, selectSql, ds, null, para);
     86             return ds;
     87         }
     88 
     89         ///<summary>
     90 /// 根据带参数的查询语句获取数据集
     91 ///</summary>
     92 ///<param name="trans">事务</param>
     93 ///<param name="selectSql">查询语句</param>
     94 ///<param name="para">参数列表</param>
     95 ///<returns>返回数据集</returns>
     96         public override DataSet GetDatasetTrans(SqlTransaction trans, String selectSql, SqlParameter[] para)
     97         {
     98             if (selectSql == null) throw new ArgumentNullException("selectSql");
     99             if (para == null) throw new ArgumentNullException("para");
    100 
    101             DataSet ds = new DataSet();
    102             SqlHelper.FillDataset(trans, CommandType.Text, selectSql, ds, null, para);
    103             return ds;
    104         }
    105 
    106         ///<summary>
    107 /// 在某个数据库连接对象上执行查询语句获取数据集
    108 ///</summary>
    109 ///<param name="cn">数据库连接对象</param>
    110 ///<param name="selectSql">查询语句</param>
    111 ///<returns>返回数据集</returns>
    112         public static DataSet GetDataset(SqlConnection conn, String selectSql)
    113         {
    114             if (conn == null) throw new ArgumentNullException("conn");
    115             if (selectSql == null) throw new ArgumentNullException("selectSql");
    116 
    117             DataSet ds = new DataSet();
    118             SqlHelper.FillDataset(conn, CommandType.Text, selectSql, ds, null);
    119             return ds;
    120         }
    121 
    122         ///<summary>
    123 /// 执行非查询语句
    124 ///</summary>
    125 ///<param name="noneQuery">非查询sql语句</param>
    126         public override void Execute(String noneQuery)
    127         {
    128             if (noneQuery == null) throw new ArgumentNullException("noneQuery");
    129 
    130             SqlHelper.ExecuteNonQuery(_connectionString, CommandType.Text, noneQuery);
    131         }
    132 
    133         ///<summary>
    134 /// 执行非查询语句
    135 ///</summary>
    136 ///<param name="noneQuery">非查询sql语句</param>
    137 ///<param name="para">参数列表</param>
    138         public override void Execute(String noneQuery, SqlParameter[] para)
    139         {
    140             if (noneQuery == null) throw new ArgumentNullException("noneQuery");
    141             if (para == null) throw new ArgumentNullException("para");
    142 
    143             SqlHelper.ExecuteNonQuery(_connectionString, CommandType.Text, noneQuery, para);
    144         }
    145 
    146         ///<summary>
    147 /// 执行查询语句获取Reader对象
    148 ///</summary>
    149 ///<param name="selectSql">查询语句</param>
    150 ///<returns>返回DataReader</returns>
    151         public override IDataReader GetReader(String selectSql)
    152         {
    153             if (selectSql == null) throw new ArgumentNullException("selectSql");
    154 
    155             return SqlHelper.ExecuteReader(_connectionString, CommandType.Text, selectSql);
    156         }
    157 
    158         ///<summary>
    159 /// 执行查询语句获取Reader对象
    160 ///</summary>
    161 ///<param name="trans">事务</param>
    162 ///<param name="selectSql">查询语句</param>
    163 ///<returns>返回DataReader</returns>
    164         public override IDataReader GetReaderTrans(SqlTransaction trans, String selectSql)
    165         {
    166             if (selectSql == null) throw new ArgumentNullException("selectSql");
    167 
    168             return SqlHelper.ExecuteReader(trans, CommandType.Text, selectSql);
    169         }
    170 
    171         ///<summary>
    172 /// 执行查询语句获取Reader对象
    173 ///</summary>
    174 ///<param name="selectSql">查询语句</param>
    175 ///<param name="para">参数列表</param>
    176 ///<returns>返回DataReader</returns>
    177         public override IDataReader GetReader(String selectSql, SqlParameter[] para)
    178         {
    179             if (selectSql == null) throw new ArgumentNullException("selectSql");
    180             if (para == null) throw new ArgumentNullException("para");
    181 
    182             return SqlHelper.ExecuteReader(_connectionString, CommandType.Text, selectSql, para);
    183         }
    184 
    185         ///<summary>
    186 /// 执行查询语句获取Reader对象
    187 ///</summary>
    188 ///<param name="trans">事务</param>
    189 ///<param name="selectSql">查询语句</param>
    190 ///<param name="para">参数列表</param>
    191 ///<returns>返回DataReader</returns>
    192         public override IDataReader GetReaderTrans(SqlTransaction trans, String selectSql, SqlParameter[] para)
    193         {
    194             if (selectSql == null) throw new ArgumentNullException("selectSql");
    195             if (para == null) throw new ArgumentNullException("para");
    196 
    197             return SqlHelper.ExecuteReader(trans, CommandType.Text, selectSql, para);
    198         }
    199 
    200         #endregion
    201 
    202         #region 执行存储过程
    203         ///<summary>
    204 /// 执行非查询存储过程
    205 ///</summary>
    206 ///<param name="spName">存储过程名称</param>
    207         public override void ExecuteSp(String spName)
    208         {
    209             if (spName == null) throw new ArgumentNullException("spName");
    210 
    211             SqlHelper.ExecuteNonQuery(_connectionString, CommandType.StoredProcedure, spName);
    212         }
    213 
    214         ///<summary>
    215 /// 执行非查询存储过程
    216 ///</summary>
    217 ///<param name="trans">事务对象</param>
    218 ///<param name="spName">存储过程名称</param>
    219         public override void ExecuteSp(SqlTransaction trans, String spName)
    220         {
    221             if (trans == null) throw new ArgumentNullException("trans");
    222             if (spName == null) throw new ArgumentNullException("spName");
    223 
    224             SqlHelper.ExecuteNonQuery(trans, CommandType.StoredProcedure, spName);
    225         }
    226 
    227         ///<summary>
    228 /// 执行非查询存储过程
    229 ///</summary>
    230 ///<param name="spName">存储过程名称</param>
    231 ///<param name="para">参数列表</param>
    232         public override void ExecuteSp(String spName, SqlParameter[] para)
    233         {
    234             if (spName == null) throw new ArgumentNullException("spName");
    235             if (para == null) throw new ArgumentNullException("para");
    236 
    237             SqlHelper.ExecuteNonQuery(_connectionString, CommandType.StoredProcedure, spName, para);
    238         }
    239 
    240         /// 执行非查询存储过程
    241 ///</summary>
    242 ///<param name="trans">事务对象</param>
    243 ///<param name="spName">存储过程名称</param>
    244 ///<param name="para">参数列表</param>
    245         public override void ExecuteSp(SqlTransaction trans, String spName, SqlParameter[] para)
    246         {
    247             if (trans == null) throw new ArgumentNullException("trans");
    248             if (spName == null) throw new ArgumentNullException("spName");
    249             if (para == null) throw new ArgumentNullException("para");
    250 
    251             SqlHelper.ExecuteNonQuery(trans, CommandType.StoredProcedure,
    252                 spName, para);
    253         }
    254 
    255         ///<summary>
    256 /// 执行查询存储过程获取Reader对象
    257 ///</summary>
    258 ///<param name="spName">存储过程名称</param>
    259 ///<returns>返回DataReader</returns>
    260         public override IDataReader GetReaderBySp(String spName)
    261         {
    262             if (spName == null) throw new ArgumentNullException("spName");
    263 
    264             return SqlHelper.ExecuteReader(_connectionString,
    265                 CommandType.StoredProcedure, spName);
    266         }
    267 
    268         ///<summary>
    269 /// 执行查询存储过程获取Reader对象
    270 ///</summary>
    271 ///<param name="spName">存储过程名称</param>
    272 ///<param name="para">参数列表</param>
    273 ///<returns>返回DataReader</returns>
    274         public override IDataReader GetReaderBySp(String spName, SqlParameter[] para)
    275         {
    276             return SqlHelper.ExecuteReader(_connectionString,
    277                 CommandType.StoredProcedure, spName, para);
    278         }
    279 
    280         ///<summary>
    281 /// 执行查询存储过程获取单值
    282 ///</summary>
    283 ///<param name="spName">存储过程名称</param>
    284 ///<returns>返回Object</returns>
    285         public override Object GetScalarBySp(String spName)
    286         {
    287             return SqlHelper.ExecuteScalar(_connectionString,
    288                 CommandType.StoredProcedure, spName);
    289         }
    290 
    291         ///<summary>
    292 /// 执行查询存储过程获取单值
    293 ///</summary>
    294 ///<param name="spName">存储过程名称</param>
    295 ///<param name="para">参数列表</param>
    296 ///<returns>返回Object</returns>
    297         public override Object GetScalarBySp(String spName, SqlParameter[] para)
    298         {
    299             return SqlHelper.ExecuteScalar(_connectionString,
    300                 CommandType.StoredProcedure, spName, para);
    301         }
    302 
    303         ///<summary>
    304 /// 根据存储过程获取数据集
    305 ///</summary>
    306 ///<param name="spName">存储过程</param>
    307 ///<returns>返回数据集</returns>
    308         public override DataSet GetDatasetBySp(String spName)
    309         {
    310             if (spName == null) throw new ArgumentNullException("spName");
    311 
    312             DataSet ds = new DataSet();
    313             SqlHelper.FillDataset(_connectionString, CommandType.StoredProcedure, spName, ds, null);
    314             return ds;
    315         }
    316         ///<summary>
    317 /// 根据带参数的存储过程获取数据集
    318 ///</summary>
    319 ///<param name="spName">存储过程</param>
    320 ///<param name="para">参数列表</param>
    321 ///<returns>返回数据集</returns>
    322         public override DataSet GetDatasetBySp(String spName, SqlParameter[] para)
    323         {
    324             if (spName == null) throw new ArgumentNullException("spName");
    325             if (para == null) throw new ArgumentNullException("para");
    326 
    327             DataSet ds = new DataSet();
    328             SqlHelper.FillDataset(_connectionString, CommandType.StoredProcedure, spName, ds, null, para);
    329             return ds;
    330         }
    331         #endregion
    332 
    333         #endregion
    334     }
    335 }
    

      


    微软本身是的SqlHelper类提供高性能可扩充的数据库访问方法,代码就不啰嗦大家都懂的,通过集成和改造对数据访问的安全性,扩展性做进一步的伸展

    测试 同时加载1w条数据试一试,方法执行时间,忽略浏览器加载时间

    改造数据访问:

    方法执行时间

    企业库:

    方法执行时间

    普通DBHlper:

    方法执行时间

    同时加载10W条数据试一试:

    改造后10W条数据访问时间:

    企业库10W数据访问时间:

    普通DBHelper,10W条数据访问时间:

    当然了测试和机器配置也相关,以上数据仅供参考,不一定准确,还有很多地方不是很完善,你的项目采用的是什么数据交互模式来?有没有更好的意见和建议,期待达人们的意见和建议。

    转载于:https://www.cnblogs.com/tomfang/archive/2011/11/14/2248723.html

    展开全文
  • 在机房做的,拷回自己电脑运行.sln后显示dll,dal文件不可用,路径问题吗?
  • C#DAL代码生成器

    2013-12-12 13:50:57
    自己写的DAL层代码生成器,生成的代码会有小错误,比如少了标点什么的,稍微改改可以用的,附上源代码供参考和完善
  • 关于 DAL

    千次阅读 2007-10-12 16:08:00
    今年上半年在做DNN项目的时候才听说DAL的(数据处理层),而关于数据处理层的概念,在很早以前就知道了。和其他很多概念一样,我虽然知道它们的存在,但是在写代码的时候,仍然糊里糊涂,很多时候,我都不...
     我是今年上半年在做DNN项目的时候才听说DAL的(数据处理层),而关于数据处理层的概念,在很早以前就知道了。

    和其他很多概念一样,我虽然是知道它们的存在,但是在写代码的时候,仍然是糊里糊涂,很多时候,我都不知道为什么这段代码要这么写?似乎写代码的思路是在跟着业务流走,业务流怎么执行,我就怎么写,这便是我的第一判断。至于那些设计模式和层的概念,早就被抛在脑后了。这是我的烦恼。

    今天,有一段代码,在同事的提示下,我对DAL的理解又有了新的理解。这实际上是一个bug,呵呵:

    //这个方法就是DAL里面的方法
    private void UpdateLog(long logID, string title, string Initials, ...)
    {
        //这个方法在执行的时候,实际上没有对Initials字段进行更新操作,这就是bug;
    }

    当我把这个方法报告给我的同事的时候,我的建议是从参数列表中去掉Initials,原因很简单,因为在业务逻辑中规定,Initials数据一旦创建不能被更改。但是我的同事立即决定在这个方法中加上对Initials字段的赋值,他说客户端在处理Initials的时候,已经限制了对Initials数据的编辑。

    后来我思考了一下,他的这个做法是完全正确的。因为这个方法是数据处理层中的方法,它要做的只是处理数据。但是后来我又思考了一下,仅仅做出这样的结论是没有意义的。因为我的判断的结果也是在处理数据。所以后来我又添加了一个条件:DAL中,不要包含业务逻辑,比如,我刚才的那个判断就把对业务逻辑的放进去了。

    我觉得我们之所以要把各种逻辑分开,除了我们涉及的系统越来越复杂之外,还有很多技术可以支持数据的攫取。在这里,我之所以用“攫取“一词,是因为目在DAL一层的框架有很多,比如hibernate,subsonic等等。我觉得他们的出现,实际上只有一个目的,就是让业务逻辑和数据库之间的gap越来越小。

    不过对于我自己来说,还有很长的路要走呀!
    展开全文
  • 请问,抽象工厂三层出现这个问题的原因是什么?为什么简单三层不用修改DAL层的生成路径,而抽象工厂三层需要修改才能正常运行? 配置文件中的节点中的内容应该是没有错误的,里面的value值我是复制粘贴的(右键--...
  • 为了让模块之间解除耦合,例如某个业务用接口表示了,那么它的具体实现都基于这个接口的;在使用中,直接操作接口类型即可,而实际实现接口的对象根据业务传递进来的。(可以看作接口所有实现的父类,这样...
  • 是不是三层的DAL换个名字而已?毕竟大家都对数据库的操作嘛,而且我用EF还有必要用仓储么?是不是可以省掉这一层?ABP框架的持久化究竟有什么问题? 在回答这些问题之前,我们要先了解一些模型分层的概念。 DO
  • 闲聊 =======================...学习方法,学习PS, Javascript, Asp.net这些,在学习中也要用什么就学什么,也不知道这样学习好不好(当然这样肯定 有一个不好的地方,就是对知识不求甚...
  • 问题提出数据访问层(DAL)的目标创建一些以便业务层来调用的类和方法。我们之前总是用GridView...一般来说,DAL是用来和数据库和BLL打交道的,也就是处理BLL和数据库的中间。数据以什么形式在DAL和BLL之前传递有很多...
  • 什么是NoSQL,为什么要使用NoSQL?

    万次阅读 多人点赞 2018-04-30 16:44:10
    1 为什么用 NoSQL? 1.1 单机 MySQL 的美好时代 ...上述架构下,我们来看看数据存储的瓶颈是什么DAL : Data Access Layer(数据访问层 – Hibernate,MyBatis) 数据量的总大小一个机器放不下时。 数据...
  • 什么不清楚的地方吗? 某些在您的系统上不起作用? 在JEMMA General Mailing列表上寻求帮助。 点击加入。 DAL WEB API提供对OSGi设备抽象层中可用的设备,功能和事件的REST和WebSocket访问。 REST API用于提供...
  • 晒晒数据访问层DAL,看看你的项目数据访问层使用的是什么形式,数据访问性能比较 采用什么样的数据访问形式是软件编码很重要的一个环节,良好的数据访问形式不仅能够提搞代码的执行效率,协作能力,更重要的是对...
  • 什么不清楚的地方吗? 某些在您的系统上不起作用? 在JEMMA General Mailing列表上寻求帮助。 点击加入。 DAL WEB API提供对OSGi设备抽象层中可用的设备,功能和事件的REST和WebSocket访问。 REST API用于提供...
  • Sleep()和 wait()有什么区别? 1.sleep线程类 Thread的方法,它使当前线程暂时睡眠,可以放在任何位置。 而 wait,它使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。 2.Sleep使用的...
  • 当然,如果需要有更强的通用性,完全可以再抽象出来,建立工厂什么的。 在这里,SQLHelper就不再累赘,本文主旨不再于此。 创建出实体类,实体类说的最简单可以看作用类来表现物理源的数据逻辑关系,比如表间...
  • 前言 在三层结构中,数据库最底层,负责对数据库的操作,如添加,删除,修改数据等....,"Factory"在DAL中起到什么样的作用呢?带着这些疑问我们开始吧. 工厂模式 设计模式一门专门的学科,也需要在实践中不断积累的
  • 1)异常:IErrorInfo.GetDescription 因 E_FAIL(0x80004005) 而失败。 此问题主要原因对Access执行的SQL语句中包含了Access不支持的成分(如Sql Server中的函数)。... 此问题的主要原因是DAL层中构建的
  • VC++/MFC Window编程原创教程文件夹...但事情就是那样,仅仅有动手了才知道什么叫做现实。 一開始没想要用三层架构的,我们小组人员能力參差不齐,那就仅仅能从控制台(黑窗体)做起。后来我想做三层架构的时候,...
  • 博主自己在登录界面登录时出现该问题,这...因此博主觉 的这因为复制的时候遗忘了什么。 解决方案;在web.config中找到      connectionString="Server= ;DataBase= ;Uid=sa;Pwd= "  providerName="Sys
  • 什么是系统的三层架构?三层架构(3-tierarchitecture)通常指将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。目的“高内聚,低耦合”的思想。  一、概念:  三层架构(3-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 555
精华内容 222
关键字:

dal是什么