步步为营 NET三层架构解析Word格式文档下载.docx
- 文档编号:16882295
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:77
- 大小:32.96KB
步步为营 NET三层架构解析Word格式文档下载.docx
《步步为营 NET三层架构解析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《步步为营 NET三层架构解析Word格式文档下载.docx(77页珍藏版)》请在冰豆网上搜索。
数据访问层(DataAccessLayer):
DAL,命名空间默认设置为DAL
SQL帮助类:
SQLHelper,命名空间默认设置为SQLHelper
另外我们为了数据传递的方便,通常再添加一个类库,这个类库是贯穿于整个三层架构中的。
即实体类。
通常命名为Model,命名空间默认值设置为:
Models。
其中封装的每个类都对应一个实体,通常就是数据库中的一个表。
如数据库中的用户表(custom)封装为(custom),将表中的每个字段都封装成共有的属性。
这样三层架构的搭建就基本完成了。
这三层有着非常强的依赖关系:
表示层←业务逻辑层←数据访问层
他们之间的数据传递是双向的,并且通常借助实体类传递数据。
那么三层架构都有哪些优点呢:
1、易于项目的修改和维护。
在项目的开发过程中或者开发后的升级过程中,甚至在项目的移植过程中。
这种三层架构是非常方便的。
比如项目从Web移植到Form,我们只需要将表示层重新做一遍就可以了。
其余两层不用改动,只需添加到现有项目就可以了。
如果不采用这种架构,只是将代码写到表示层。
那么所有的编码几乎都要重新来了。
2、易于扩展。
在功能的扩展上同样如此,如有功能的添加只需把原有的类库添加方法就可了
3、易于代码的重用。
这一点就不用解释了。
4、易于分工协作开
还可以加个接口类库Iinterface,加入设计模式,使你的代码灵活性更好,质量更高。
下一步讲解数据库的设计。
敬请拍砖。
要开发用户管理系统,我们首先要了解需求,现在就举一个简单需求,用户表,假设有两种角色用一个字段departID来判断,管理员和员工,
我们要先建一个用户表custom和一个部门表department:
CREATETABLE[dbo].[custom](
[id][int]IDENTITY(1,1)NOTNULL,
[cname][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[departID][int]NOTNULL,
[age][int]NOTNULL,
[ename][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[password][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
CONSTRAINT[PK_custom]PRIMARYKEYCLUSTERED
(
[id]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY];
CREATETABLE[dbo].[department](
[departname][nvarchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[description][nchar](10)COLLATEChinese_PRC_CI_ASNOTNULL,
CONSTRAINT[PK_department]PRIMARYKEYCLUSTERED
)ON[PRIMARY]
建完数据库表后,开始写存储过程,插入一条数据:
CREATEPROCEDURE[dbo].[spInsertCustom]
@cnamenvarchar(50),
@enamenvarchar(50),
@ageint,
@departIDint,
@passwordnvarchar(50)
AS
BEGIN
insertintocustom(cname,departID,age,ename,password)values(@cname,@departID,@age,@ename,@password)
END
RETURN@@Identity
createPROCEDURE[dbo].[spInsertDepartment]
@departnamenvarchar(50),
@descriptionnvarchar(50)
insertintodepartment(departname,description)values(@departname,@description)
现建两个更新一条数据的存储过程:
CREATEPROCEDURE[dbo].[spupdatecustom]
@idint,
update
custom
set
cname=@cname,
departID=@departID,
age=@age,
ename=@ename,
password=@password
whereid=@id
COMMITTRAN
createprocedurespupdatedepart
@descriptionnchar(10),
@idint
)
as
UPDATE[dbo].[department]
SET[departname]=@departname
[description]=@departname
WHEREid=@id
再新建两个取出所有用户的存储过程:
CREATEPROCEDURE[dbo].[spGetcustom]
select*fromcustomorderbyiddesc
createPROCEDURE[dbo].[spGetAlldepartment]
select*fromdepartment
再新建一个根据ID取出一条数据的存储过程:
CREATEPROCEDURE[dbo].[spGetcustomer]
select*fromcustomwhereid=@id
现建一个根据部门名取部门ID的存储过程:
createPROCEDURE[dbo].[spGetdepartmenter]
@departnamenvarchar(50)
select*fromdepartmentwheredepartname=@departname
再建两个根据ID删除数据的存储过程:
createPROCEDURE[dbo].[spDeletecustom]
deletecustomwhereid=@id
CREATEPROCEDUREspdeletedepart
deletedepartmentwhereid=@id
GO
数据库设计就建好了,这只是一个简单的示例.欢迎拍砖.
下次讲解SQLHelper的设计.
数据库设计好了,我们开始设计SQLHelper了,是一个SQL基类.
连接数据源:
privateSqlConnectionmyConnection=null;
privatereadonlystringRETURNVALUE="
RETURNVALUE"
;
打开数据库连接.
privatevoidOpen()
{
//打开数据库连接
if(myConnection==null)
//myConnection=newSqlConnection(ConfigurationManager.ConnectionStrings["
ConnectionString"
].ConnectionString);
myConnection=newSqlConnection(ConfigurationManager.AppSettings["
].ToString());
}
if(myConnection.State==ConnectionState.Closed)
try
///打开数据库连接
myConnection.Open();
catch(Exceptionex)
SystemError.CreateErrorLog(ex.Message);
finally
///关闭已经打开的数据库连接
关闭数据库连接
publicvoidClose()
///判断连接是否已经创建
if(myConnection!
=null)
///判断连接的状态是否打开
if(myConnection.State==ConnectionState.Open)
myConnection.Close();
释放资源
publicvoidDispose()
//确认连接是否已经关闭
myConnection.Dispose();
myConnection=null;
执行无参数和返回int型的存储过程
publicintRunProc(stringprocName)
SqlCommandcmd=CreateProcCommand(procName,null);
///执行存储过程
cmd.ExecuteNonQuery();
///记录错误日志
///关闭数据库的连接
Close();
///返回存储过程的参数值
return(int)cmd.Parameters[RETURNVALUE].Value;
执行传入参数和返回int型的存储过程
publicintRunProc(stringprocName,SqlParameter[]prams)
SqlCommandcmd=CreateProcCommand(procName,prams);
执行存储过程和返回SqlDataReader
publicvoidRunProc(stringprocName,outSqlDataReaderdataReader)
///创建Command
///读取数据
dataReader=cmd.ExecuteReader(CommandBehavior.CloseConnection);
dataReader=null;
执行传入参数和返回SqlDataReader存储过程
publicvoidRunProc(stringprocName,SqlParameter[]prams,outSqlDataReaderdataReader)
执行无参数存储过程返回DataSet
publicvoidRunProc(stringprocName,refDataSetdataSet)
if(dataSet==null)
dataSet=newDataSet();
///创建SqlDataAdapter
SqlDataAdapterda=CreateProcDataAdapter(procName,null);
da.Fill(dataSet);
执行传入参数的存储过程返回DataSet
publicvoidRunProc(stringprocName,SqlParameter[]prams,refDataSetdataSet)
SqlDataAdapterda=CreateProcDataAdapter(procName,prams);
执行传入参数和表名的存储过程返回DataSet
publicvoidRunProc(stringprocName,SqlParameter[]prams,stringTableName,refDataSetdataSet)
da.Fill(dataSet,TableName);
执行无参数SQL语句
publicintRunSQL(stringcmdText)
SqlCommandcmd=CreateSQLCommand(cmdText,null);
执行传入参数SQL语句
publicintRunSQL(stringcmdText,SqlParameter[]prams)
SqlCommandcmd=CreateSQLCommand(cmdText,prams);
执行无参数SQL语句返回SqlDataReader
publicvoidRunSQL(stringcmdText,outSqlDataReaderdataReader)
执行传入参数SQL语句返回SqlDataReader
publicvoidRunSQL(stringcmdText,SqlParameter[]prams,outSqlDataReaderdataReader)
执行无参数SQL语句返回DataSet
publicvoidRunSQL(stringcmdText,refDataSetdataSet)
SqlDataAdapterda=CreateSQLDataAdapter(cmdText,null);
执行传入参数SQL语句返回DataSet
publicvoidRunSQL(stringcmdText,SqlParameter[]prams,refDataSetdataSet)
SqlDataAdapterda=CreateProcDataAdapter(cmdText,prams);
Syste
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步步为营 NET三层架构解析 NET 三层 架构 解析