2工厂三层技术文档.docx
- 文档编号:27014857
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:32
- 大小:83.99KB
2工厂三层技术文档.docx
《2工厂三层技术文档.docx》由会员分享,可在线阅读,更多相关《2工厂三层技术文档.docx(32页珍藏版)》请在冰豆网上搜索。
2工厂三层技术文档
目录
1.建立Model类库项目,为每个数据表建立模型实体类。
3
2.建立IDAL类库项目,抽象数据访问接口。
4
3.建立针对不同数据库的访问的DAL5
4.实现抽象工厂模式,建立项目DALFactory13
5.建立业务逻辑层项目BLL17
6.建立web层21
7.总结21
需求:
在程序代码不做任何改动的情况,只要配置不同的数据库如:
ACCESS,MSSQL,ORACLE,mysql等,则程序一样能执行。
整个解决方法最终的项目结构图:
有数据表:
admin管理员表,以此为例
1.建立Model类库项目,为每个数据表建立模型实体类。
Admin类代码:
usingSystem;
namespaceModel
{
///
///Admin:
实体类(属性说明自动提取数据库字段的描述信息)
///
[Serializable]
publicpartialclassAdmin
{
publicAdmin()
{}
#regionModel
privateint_adminid;
privatestring_loginid;
privatestring_loginpwd;
privatestring_adminname;
privatebool_sex;
///
///
///
publicintadminID
{
set{_adminid=value;}
get{return_adminid;}
}
///
///
///
publicstringLoginID
{
set{_loginid=value;}
get{return_loginid;}
}
///
///
///
publicstringLoginPWD
{
set{_loginpwd=value;}
get{return_loginpwd;}
}
///
///
///
publicstringAdminName
{
set{_adminname=value;}
get{return_adminname;}
}
///
///
///
publicboolsex
{
set{_sex=value;}
get{return_sex;}
}
#endregionModel
}
}
2.建立IDAL类库项目,抽象数据访问接口。
为每个表建立接口,规定各种操作(如增,删,改,查)
例如:
数据库中,有一个是管理员表admin,则建立接口IAdmin。
IAdmin.cs代码如下:
usingSystem;
usingSystem.Data;
namespaceIDAL
{
///
///接口层Admin
///
publicinterfaceIAdmin
{
#region成员方法
///
///增加一条数据
///
intAdd(Model.Adminmodel);
///
///更新一条数据
///
boolUpdate(Model.Adminmodel);
///
///删除一条数据
///
boolDelete(intadminID);
boolDeleteList(stringadminIDlist);
///
///得到一个对象实体
///
Model.AdminGetModel(intadminID);
Model.AdminDataRowToModel(DataRowrow);
///
///获得数据列表
///
DataSetGetList(stringstrWhere);
///
///获得前几行数据
///
DataSetGetList(intTop,stringstrWhere,stringfiledOrder);
intGetRecordCount(stringstrWhere);
DataSetGetListByPage(stringstrWhere,stringorderby,intstartIndex,intendIndex);
///
///根据分页获得数据列表
///
//DataSetGetList(intPageSize,intPageIndex,stringstrWhere);
#endregion成员方法
#regionMethodEx
#endregionMethodEx
}
}
3.建立针对不同数据库的访问的DAL
引用IDAL项目,针对Access数据库建立OleDbDAL项目,针对SQLserver数据库建立SQLServerDAL项目,针对Oracel数据库建立OracelDAL项目。
在项目里实现IDAL接口中对表的各种操作定义。
(1)、SQLServerDAL项目里对admin表操作代码如下:
注意:
此处应添加上个项目中的数据库操作文件DbHelperSQL.cs
Admin.cs代码如下:
usingSystem;
usingSystem.Data;
usingSystem.Text;
usingSystem.Data.SqlClient;
usingIDAL;
namespaceSQLServerDAL
{
///
///数据访问类:
Admin
///
publicpartialclassAdmin:
IAdmin
{
publicAdmin()
{}
#regionMethod
///
///增加一条数据
///
publicintAdd(Model.Adminmodel)
{
StringBuilderstrSql=newStringBuilder();
StringBuilderstrSql1=newStringBuilder();
StringBuilderstrSql2=newStringBuilder();
if(model.LoginID!
=null)
{
strSql1.Append("LoginID,");
strSql2.Append("'"+model.LoginID+"',");
}
if(model.LoginPWD!
=null)
{
strSql1.Append("LoginPWD,");
strSql2.Append("'"+model.LoginPWD+"',");
}
if(model.AdminName!
=null)
{
strSql1.Append("AdminName,");
strSql2.Append("'"+model.AdminName+"',");
}
if(model.sex!
=null)
{
strSql1.Append("sex,");
strSql2.Append(""+(model.sex?
1:
0)+",");
}
strSql.Append("insertintoAdmin(");
strSql.Append(strSql1.ToString().Remove(strSql1.Length-1));
strSql.Append(")");
strSql.Append("values(");
strSql.Append(strSql2.ToString().Remove(strSql2.Length-1));
strSql.Append(")");
strSql.Append(";select@@IDENTITY");
objectobj=DbHelperSQL.GetSingle(strSql.ToString());
if(obj==null)
{
return0;
}
else
{
returnConvert.ToInt32(obj);
}
}
///
///更新一条数据
///
publicboolUpdate(Model.Adminmodel)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("updateAdminset");
if(model.LoginID!
=null)
{
strSql.Append("LoginID='"+model.LoginID+"',");
}
else
{
strSql.Append("LoginID=null,");
}
if(model.LoginPWD!
=null)
{
strSql.Append("LoginPWD='"+model.LoginPWD+"',");
}
else
{
strSql.Append("LoginPWD=null,");
}
if(model.AdminName!
=null)
{
strSql.Append("AdminName='"+model.AdminName+"',");
}
else
{
strSql.Append("AdminName=null,");
}
if(model.sex!
=null)
{
strSql.Append("sex="+(model.sex?
1:
0)+",");
}
else
{
strSql.Append("sex=null,");
}
intn=strSql.ToString().LastIndexOf(",");
strSql.Remove(n,1);
strSql.Append("whereadminID="+model.adminID+"");
introwsAffected=DbHelperSQL.ExecuteSql(strSql.ToString());
if(rowsAffected>0)
{
returntrue;
}
else
{
returnfalse;
}
}
///
///删除一条数据
///
publicboolDelete(intadminID)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("deletefromAdmin");
strSql.Append("whereadminID="+adminID+"");
introwsAffected=DbHelperSQL.ExecuteSql(strSql.ToString());
if(rowsAffected>0)
{
returntrue;
}
else
{
returnfalse;
}
}///
///批量删除数据
///
publicboolDeleteList(stringadminIDlist)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("deletefromAdmin");
strSql.Append("whereadminIDin("+adminIDlist+")");
introws=DbHelperSQL.ExecuteSql(strSql.ToString());
if(rows>0)
{
returntrue;
}
else
{
returnfalse;
}
}
///
///得到一个对象实体
///
publicModel.AdminGetModel(intadminID)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("selecttop1");
strSql.Append("adminID,LoginID,LoginPWD,AdminName,sex");
strSql.Append("fromAdmin");
strSql.Append("whereadminID="+adminID+"");
Model.Adminmodel=newModel.Admin();
DataSetds=DbHelperSQL.Query(strSql.ToString());
if(ds.Tables[0].Rows.Count>0)
{
returnDataRowToModel(ds.Tables[0].Rows[0]);
}
else
{
returnnull;
}
}
///
///得到一个对象实体
///
publicModel.AdminDataRowToModel(DataRowrow)
{
Model.Adminmodel=newModel.Admin();
if(row!
=null)
{
if(row["adminID"]!
=null&&row["adminID"].ToString()!
="")
{
model.adminID=int.Parse(row["adminID"].ToString());
}
if(row["LoginID"]!
=null)
{
model.LoginID=row["LoginID"].ToString();
}
if(row["LoginPWD"]!
=null)
{
model.LoginPWD=row["LoginPWD"].ToString();
}
if(row["AdminName"]!
=null)
{
model.AdminName=row["AdminName"].ToString();
}
if(row["sex"]!
=null&&row["sex"].ToString()!
="")
{
if((row["sex"].ToString()=="1")||(row["sex"].ToString().ToLower()=="true"))
{
model.sex=true;
}
else
{
model.sex=false;
}
}
}
returnmodel;
}
///
///获得数据列表
///
publicDataSetGetList(stringstrWhere)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("selectadminID,LoginID,LoginPWD,AdminName,sex");
strSql.Append("FROMAdmin");
if(strWhere.Trim()!
="")
{
strSql.Append("where"+strWhere);
}
returnDbHelperSQL.Query(strSql.ToString());
}
///
///获得前几行数据
///
publicDataSetGetList(intTop,stringstrWhere,stringfiledOrder)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("select");
if(Top>0)
{
strSql.Append("top"+Top.ToString());
}
strSql.Append("adminID,LoginID,LoginPWD,AdminName,sex");
strSql.Append("FROMAdmin");
if(strWhere.Trim()!
="")
{
strSql.Append("where"+strWhere);
}
strSql.Append("orderby"+filedOrder);
returnDbHelperSQL.Query(strSql.ToString());
}
///
///获取记录总数
///
publicintGetRecordCount(stringstrWhere)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("selectcount
(1)FROMAdmin");
if(strWhere.Trim()!
="")
{
strSql.Append("where"+strWhere);
}
objectobj=DbHelperSQL.GetSingle(strSql.ToString());
if(obj==null)
{
return0;
}
else
{
returnConvert.ToInt32(obj);
}
}
///
///分页获取数据列表
///
publicDataSetGetListByPage(stringstrWhere,stringorderby,intstartIndex,intendIndex)
{
StringBuilderstrSql=newStringBuilder();
strSql.Append("SELECT*FROM(");
strSql.Append("SELECTROW_NUMBER()OVER(");
if(!
string.IsNullOrEmpty(orderby.Trim()))
{
strSql.Append("orderbyT."+orderby);
}
else
{
strSql.Append("orderbyT.adminIDdesc");
}
strSql.Append(")ASRow,T.*fromAdminT");
if(!
string.IsNullOrEmpty(strWhere.Trim()))
{
strSql.Append("WHERE"+strWhere);
}
strSql.Append(")TT");
strSql.AppendFormat("WHERETT.Rowbetween{0}and{1}",startIndex,endIndex);
returnDbHelperSQL.Query(strSql.ToString());
}
/*
*/
#endregionMethod
#regionMethodEx
#endregionMethodEx
}
}
(2)、OleDbDAL项目里对admin数据表操作代码如下:
略
4.实现抽象工厂模式,建立项目DALFactory
(1)、实现条件外置,通过配置文件来实现对数据访问层的判断,从而访问不同的数据库
在web.config里增加当前数据库访问层信息
--数据访问层程序集名称 -->
获取程序集名称--对着项目名点右键选择属性,打开如下图。
(2)、增加
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工厂 三层 技术 文档