代码改变世界

初来乍到,跟大家分享项目中用的到的一个数据库访问层SuperDAL

2010-09-07 11:00  至强一族  阅读(391)  评论(2)    收藏  举报

第一次写博客,那是因为我想与大家分享.Net世界.我原来是ASP程序员,与.Net结缘那是在两年多前.第一次接触它,就喜欢上了.哈哈
接着我给大家分享一下我在项目中用到的数据访问层,这个是我用微软网站上得到的DBHepler数据库访问层的一次改编,让它支持实体类和用表达

式的方式生成SQL,而且更关键的是,他是采用参数的方式传值的,这样就避免了SQL的注入啦..
以下是这个项目的结构
 
[SuperDAL]
---DbHelper.cs(来自MSDN的数据访问层)
---EntityManager.cs(实体类管理)
---Expressions.cs(实体类表达式查询)
---Expression.cs(实体类表达式)
---OrderByExpressions.cs(排序表达式查询)
---OrderByExpression.cs(排序表达式)
---ObjectValues
-------OrderBy.cs(排序枚举类)
---DBManager.cs(数据访问类管理)
---DbParams.cs(数据库访问类参数)
---DataTableExtensions.cs(这个就是顾名思义啦,DataTable传实体类)

在这里最主要介绍的就是EntityManager这个啦,使用方法如下:


有数据库DB的一张表Customs
CREATE TABLE [Customs] (
 [Name] [varchar] (20) ,
 [Password] [varchar] (20) ,
 [Email] [varchar] (50) ,
 [Phone] [varchar] (11) NULL ,
 [Old] [int] ,
 [Birthday] [DateTime]
)

有个实体类Customs.cs,结构如下:
public class Customs
{
   public string Name {get;set;}
   public string Password {get;set;}
   public string Email {get;set;}
   public string Phone {get;set;}
   public int Old{get;set}
   public DateTime Brithday {get;set;}
}

数据库表与实体Customs结构是一一对应的.有了实体类CUstoms,下面就可以操作实体类跟操作数据库一样的啦,我们新建一个实体类管理类

CustomsManager.cs

public class CustomsManager:EntityManager<Customs>
{
    public Customs GetByName(string name)
    {
         //创建表达式Expressions
         Expressions exps=new Expressions();
         //向表达式添加条件
         exps.Eq("name",name);
         
         //根据条件查询返回实体类
         return EM_GetUnique(exps);
    }

    public List<Customs> SearchByName(string name)
   {
         //同样像上面一样建立表达式类
      Expressions exps=new Expressions();
        exps.Like("name",name);//当然,有年朋友会说如果我要姓为"陈"的,那有些人的名字带陈的怎么办,没关系,可以改为 exps.LeftLike("name",name);
        
         //根据条件查询返回实体类
       return EM_GetEntity(exps);
   }


    /// <summary>
    /// 登录
   /// </summary>
    /// <param name="name">用户名</param>
    /// <param name="password">密码</param>
   public List<Customs> Login(string name,string password)
   {
       Expressions exps=new Expressions();
       exps.Eq("name",name);
       exps.Eq("password",password);
       
       return EM_GetEntity(exps);
   }

    /// <summary>
    /// 选择年龄大于指定岁数的,并按年龄从小到大排序
   /// </summary>
   /// <param name="old">年龄</param>
   public List<Customs> SelectOlder(int old)
   {
       Expressions exps=new Expressions();
       exps.Gt("old",old);
       exp.OrderBys.Add("old", OrderBy.Asc);
       
       return EM_GetEntity(exps);
   }

    /// <summary>
    /// 选择年龄大于小于指定岁数段的,并按年龄从小到大,姓名从字母升序排序
   /// </summary>
   /// <param name="old">年龄</param>
   public List<Customs> SelectByOld(int oldStart,int oldend)
   {
       Expressions exps=new Expressions();
       exps.Between("old",oldStart,oldEnd);
       exp.OrderBys.Add("old", OrderBy.Asc);
       exp.OrderBys.Add("name",OrderBy.Asc);
       
       return EM_GetEntity(exps);
   }
   
    #region  增删改 操作

    /// <summary>
    /// 更新操作
   /// </summary>
    /// <param name="customs">实体类</param>
    public int Update(Customs customs)
   {
        return EM_Save(customs);//返回更新的记录数,当然,一般成功执行就会返回1;也可以改上面为public void Update(Customs customs)
   }

    /// <summary>
    /// 删除操作
   /// </summary>
    /// <param name="name"></param>
   public int DeleteByName(string name)
   {
        Expressions exps=new Expressions();
        exps.Eq("name",name);
        
        return EM_Delete(exps);
   }

    /// <summary>
    /// 删除操作
   /// </summary>
    /// <param name="custom">实体类</param>
   public int Save(Customs custom)
   {
        return EM_Save(custom);
   }

   #endregion
}


 

当然还有更多的也就不一一贴出来了
    Expressions支持的表达式有

1. Eq (等于)[name=value]
2. NotEq (不等于)[not name = value]
3. Ge (大于等于)[name >=value]
4. Gt (大于)[name>value]
5. Le (小于等于)[name<=value]
6. Lt (小于)[name<value]
7. In (包括)[name in (value)]
8. NotIn (不包括)[not name in (value)
9. IsNotNull (不为NULL)[not name is null]
10. IsNull (等于NULL)[name is null]
11. Between (之间)[name between valueStart and valueEnd]
12. Like (模糊) [name like ‘%value%’ ]
13. LeftLike (左模糊) [name like ‘%value’]
14. RightLike (右模糊) [name like ‘value%’]

其它功能待与Net爱好者探讨啦,希望你有更好的思路

附件:
  下载地址:1.源码Source