初来乍到,跟大家分享项目中用的到的一个数据库访问层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
浙公网安备 33010602011771号