目标:1适用小型项目,比如业务逻辑很简单的企业网站,什么新闻发布啦,产片展示啦。2通用的,不针对某一项目。带箭头的虚线表示依赖关系,业务逻辑层只依赖数据访问层接口和实体,通用类。
主要接口代码:
public interface IDALContext : IDisposable
{
//该方法可返回IDALDase,IDALTUser,IDALTRole,可利用反射实现返回不同类型实例
TDAL GetDAL<TDAL>() where TDAL : class;
}
public interface IDALBase
{
DataTable GetDataTable(String commandText);
DataTable GetDataTable(String commandText, CommandType type);
DataTable GetDataTable<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
DataTable GetDataTable<TParameter>(String commandText, CommandType type, params TParameter[] parameters)
where TParameter : DbParameter; int ExecuteNonQuery(String commandText);
int ExecuteNonQuery(String commandText, CommandType type);
int ExecuteNonQuery<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
int ExecuteNonQuery<TParameter>(String commandText, CommandType type, params TParameter[] parameters)
where TParameter : DbParameter;
TCommand GetCommand<TCommand>()
where TCommand : DbCommand;
}
public interface IDALTUser
{ TUser SelectFirst(params ConditionPairs[] conditionPairs);
TUser SelectFirst(int index, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair orderPair, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair orderPair, int index, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair[] orderPairs, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair[] orderPairs, int index, params ConditionPairs[] conditionPairs); List<TUser> Select(params ConditionPairs[] conditionPairs);
List<TUser> Select(int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(int index, bool all, params ConditionPairs[] conditionPairs);
List<TUser> Select(int index, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, int index, bool all, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, int index, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, int index, bool all, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, int index, int count, params ConditionPairs[] conditionPairs); int Delete(params ConditionPairs[] conditionPairs); int Insert(TUser user); int Update(SetPair setPair, params ConditionPairs[] conditionPairs);
int Update(SetPair[] setPairs, params ConditionPairs[] conditionPairs); int GetCount(params ConditionPairs[] conditionPairs); TUser GetModel(String commandText);
TUser GetModel(String commandText, CommandType type);
TUser GetModel<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
TUser GetModel<TParameter>(String commandText,CommandType type, params TParameter[] parameters)
where TParameter : DbParameter;
List<TUser> GetModels(String commandText);
List<TUser> GetModels(String commandText, CommandType type);
List<TUser> GetModels<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
List<TUser> GetModels<TParameter>(String commandText,CommandType type, params TParameter[] parameters)
where TParameter : DbParameter;
}
IDALTRole和IDALTUser是类似的。
公共类说明:
/// <summary>
/// 判断的操作符
/// </summary>
public enum ConditionOperation
{
Equal = 1,
GreaterThan,
GreaterOrEqual,
LessThan,
LessOrEqual,
NotEqual
} public enum LogicalOperation
{
And=1,
Or
}
ConditionPair,该类的每个实例表示一个条件,如login_name='king'这个条件可用该实例new ConditionPair("login_name","king",ConditionOperation.Equal )表示. ConditionPairs表示多个条件放在一起,如login_name='king' and password='123'可用实例new ConditionPairs(LogicalOperation.And,new ConditionPairs("login_name","king"),new ConditionPair("password","123"))表示 SetPair表示一个排序规则,如order by login_name desc可用实例new SetPair("login_name",true)表示调用举例:
String connStr=System.Configuration.ConfigurationManager.ConnectionStrings["connectionString1"].ConnectionString;
using (IDALContext dalContext = new DALContext(connStr))
{
IDALTUser dalUser=dalContext.GetDAL<IDALTUser>();
gv1.DataSource = dalUser.Select();
gv1.DataBind(); gv2.DataSource = dalUser.Select(2, 5);
gv2.DataBind(); gv3.DataSource = dalUser.Select(new OrderPair("create_datetime",true));
gv3.DataBind(); gv4.DataSource = dalUser.Select(new ConditionPairs(new ConditionPair[]{new ConditionPair("id",11,ConditionOperation.GreaterThan),
new ConditionPair("id",15,ConditionOperation.LessThan)}));
gv4.DataBind(); gv5.DataSource=dalUser.Select(new ConditionPairs(new ConditionPair[]{
new ConditionPair("id",11,ConditionOperation.GreaterOrEqual),
new ConditionPair("id",15,ConditionOperation.LessOrEqual)}),
new ConditionPairs(LogicalOperation.Or,new ConditionPair[]{
new ConditionPair("login_name","king")}),
new ConditionPairs(LogicalOperation.Or,new ConditionPair[]{
new ConditionPair("login_name","magic")}));
gv5.DataBind(); gv6.DataSource=dalUser.Select(new ConditionPairs(new ConditionPair[]{
new ConditionPair("id",15,ConditionOperation.GreaterThan,LogicalOperation.Or),
new ConditionPair("id",3,ConditionOperation.LessThan,LogicalOperation.Or)}),
new ConditionPairs(LogicalOperation.And,new ConditionPair[]{
new ConditionPair("create_datetime",new DateTime(2011,7,25,11,19,10),ConditionOperation.GreaterThan)}
));
gv6.DataBind(); gv7.DataSource = dalUser.Select(new OrderPair[] { new OrderPair("id"), new OrderPair("bh", true) }, 2, 3,
new ConditionPairs(new ConditionPair[]{new ConditionPair("id",17,ConditionOperation.GreaterOrEqual),
new ConditionPair("id",20,ConditionOperation.LessOrEqual)}),
new ConditionPairs(LogicalOperation.Or, new ConditionPair("login_name", "king")),
new ConditionPairs(LogicalOperation.Or, new ConditionPair("login_name", "magic")));
gv7.DataBind(); gv8.DataSource =new List<TUser>(){ dalUser.SelectFirst(new ConditionPairs(new ConditionPair[]{
new ConditionPair("login_name","king")}))};
gv8.DataBind(); IDALBase dalBase = dalContext.GetDAL<IDALBase>();
gv9.DataSource = dalBase.GetDataTable("select * from t_user");
gv9.DataBind();
}还不能实现的功能:不支持表间连接查询,不支持事务,执行具体的sql语句时传递数据库参数时不能和具体的数据库参数类型解耦。请大家赐教参数解耦的问题,接口设计的可行性,合理性,如果成熟了计划写一个生成该设计中实体类和具体数据库实现的代码生成器
主要接口代码:
public interface IDALContext : IDisposable
{
//该方法可返回IDALDase,IDALTUser,IDALTRole,可利用反射实现返回不同类型实例
TDAL GetDAL<TDAL>() where TDAL : class;
}
public interface IDALBase
{
DataTable GetDataTable(String commandText);
DataTable GetDataTable(String commandText, CommandType type);
DataTable GetDataTable<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
DataTable GetDataTable<TParameter>(String commandText, CommandType type, params TParameter[] parameters)
where TParameter : DbParameter; int ExecuteNonQuery(String commandText);
int ExecuteNonQuery(String commandText, CommandType type);
int ExecuteNonQuery<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
int ExecuteNonQuery<TParameter>(String commandText, CommandType type, params TParameter[] parameters)
where TParameter : DbParameter;
TCommand GetCommand<TCommand>()
where TCommand : DbCommand;
}
public interface IDALTUser
{ TUser SelectFirst(params ConditionPairs[] conditionPairs);
TUser SelectFirst(int index, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair orderPair, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair orderPair, int index, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair[] orderPairs, params ConditionPairs[] conditionPairs);
TUser SelectFirst(OrderPair[] orderPairs, int index, params ConditionPairs[] conditionPairs); List<TUser> Select(params ConditionPairs[] conditionPairs);
List<TUser> Select(int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(int index, bool all, params ConditionPairs[] conditionPairs);
List<TUser> Select(int index, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, int index, bool all, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair orderPair, int index, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, int count, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, int index, bool all, params ConditionPairs[] conditionPairs);
List<TUser> Select(OrderPair[] orderPairs, int index, int count, params ConditionPairs[] conditionPairs); int Delete(params ConditionPairs[] conditionPairs); int Insert(TUser user); int Update(SetPair setPair, params ConditionPairs[] conditionPairs);
int Update(SetPair[] setPairs, params ConditionPairs[] conditionPairs); int GetCount(params ConditionPairs[] conditionPairs); TUser GetModel(String commandText);
TUser GetModel(String commandText, CommandType type);
TUser GetModel<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
TUser GetModel<TParameter>(String commandText,CommandType type, params TParameter[] parameters)
where TParameter : DbParameter;
List<TUser> GetModels(String commandText);
List<TUser> GetModels(String commandText, CommandType type);
List<TUser> GetModels<TParameter>(String commandText, params TParameter[] parameters)
where TParameter : DbParameter;
List<TUser> GetModels<TParameter>(String commandText,CommandType type, params TParameter[] parameters)
where TParameter : DbParameter;
}
IDALTRole和IDALTUser是类似的。
公共类说明:
/// <summary>
/// 判断的操作符
/// </summary>
public enum ConditionOperation
{
Equal = 1,
GreaterThan,
GreaterOrEqual,
LessThan,
LessOrEqual,
NotEqual
} public enum LogicalOperation
{
And=1,
Or
}
ConditionPair,该类的每个实例表示一个条件,如login_name='king'这个条件可用该实例new ConditionPair("login_name","king",ConditionOperation.Equal )表示. ConditionPairs表示多个条件放在一起,如login_name='king' and password='123'可用实例new ConditionPairs(LogicalOperation.And,new ConditionPairs("login_name","king"),new ConditionPair("password","123"))表示 SetPair表示一个排序规则,如order by login_name desc可用实例new SetPair("login_name",true)表示调用举例:
String connStr=System.Configuration.ConfigurationManager.ConnectionStrings["connectionString1"].ConnectionString;
using (IDALContext dalContext = new DALContext(connStr))
{
IDALTUser dalUser=dalContext.GetDAL<IDALTUser>();
gv1.DataSource = dalUser.Select();
gv1.DataBind(); gv2.DataSource = dalUser.Select(2, 5);
gv2.DataBind(); gv3.DataSource = dalUser.Select(new OrderPair("create_datetime",true));
gv3.DataBind(); gv4.DataSource = dalUser.Select(new ConditionPairs(new ConditionPair[]{new ConditionPair("id",11,ConditionOperation.GreaterThan),
new ConditionPair("id",15,ConditionOperation.LessThan)}));
gv4.DataBind(); gv5.DataSource=dalUser.Select(new ConditionPairs(new ConditionPair[]{
new ConditionPair("id",11,ConditionOperation.GreaterOrEqual),
new ConditionPair("id",15,ConditionOperation.LessOrEqual)}),
new ConditionPairs(LogicalOperation.Or,new ConditionPair[]{
new ConditionPair("login_name","king")}),
new ConditionPairs(LogicalOperation.Or,new ConditionPair[]{
new ConditionPair("login_name","magic")}));
gv5.DataBind(); gv6.DataSource=dalUser.Select(new ConditionPairs(new ConditionPair[]{
new ConditionPair("id",15,ConditionOperation.GreaterThan,LogicalOperation.Or),
new ConditionPair("id",3,ConditionOperation.LessThan,LogicalOperation.Or)}),
new ConditionPairs(LogicalOperation.And,new ConditionPair[]{
new ConditionPair("create_datetime",new DateTime(2011,7,25,11,19,10),ConditionOperation.GreaterThan)}
));
gv6.DataBind(); gv7.DataSource = dalUser.Select(new OrderPair[] { new OrderPair("id"), new OrderPair("bh", true) }, 2, 3,
new ConditionPairs(new ConditionPair[]{new ConditionPair("id",17,ConditionOperation.GreaterOrEqual),
new ConditionPair("id",20,ConditionOperation.LessOrEqual)}),
new ConditionPairs(LogicalOperation.Or, new ConditionPair("login_name", "king")),
new ConditionPairs(LogicalOperation.Or, new ConditionPair("login_name", "magic")));
gv7.DataBind(); gv8.DataSource =new List<TUser>(){ dalUser.SelectFirst(new ConditionPairs(new ConditionPair[]{
new ConditionPair("login_name","king")}))};
gv8.DataBind(); IDALBase dalBase = dalContext.GetDAL<IDALBase>();
gv9.DataSource = dalBase.GetDataTable("select * from t_user");
gv9.DataBind();
}还不能实现的功能:不支持表间连接查询,不支持事务,执行具体的sql语句时传递数据库参数时不能和具体的数据库参数类型解耦。请大家赐教参数解耦的问题,接口设计的可行性,合理性,如果成熟了计划写一个生成该设计中实体类和具体数据库实现的代码生成器
解决方案 »
- asp.net mvc中实现在线人数统计
- 求助This type of page is not served.
- e.item.cells[] 怎么用
- .net中关于用户权限的处理!
- 奇怪的SVG动态修改src问题 Fire Fox
- 100分!请问怎么实现这样的幻灯片的功能
- 求教各位高手怎样将我本机当成服务器。然后别人可以访问我的机子上面的程序??
- 高手勿进,最简单最笨的问题.怕被笑话
- 100分求教,请问TextBox控件如何在不失去焦点的情况下,触发TextChange事件,谢谢高手的指教了。
- 急!!这个问题让我郁闷了好几天了!!!!在线等待回复!!!!!
- MVC中类似在GridView中点击行就可以直接编辑,这个功能怎么做?
- EXCEL下载完后如何跳转
这样当要切换数据库时不用去改动bll
要自己写DAL的话,仿照ADO写个先
protected DataTable GetData_MaterialSearch() {
//调用视图驱动器更新Model
ViewDrv.MethodViewDrv.UpdateParams(this, this.Model.MethodMaterialSearch);
//调用DAL获取数据,当然你可以使用JsonTable做为数据传送载体
DataTable _DT = DAHelper.ExecuteMethod(this.Model.MethodMaterialSearch);
if(_DT == null) throw new MyException("操作失败,请稍后重试");
return _DT;
}//end GetData_MaterialSearch