1、asp三层架构实例讲解三层架构的应用以及搭建一、数据库 /* = */ /* DBMSname:MicrosoftSQLServer2000 */ /* = */ if exists ( select 1 from sysobjects where id = object_id一、数据库/*=*/*DBMSname:MicrosoftSQLServer2000*/*=*/ifexists(select1fromsysobjectswhereid=object_id(newsContent)andtype=U)droptablenewsContentgo/*=*/*Table:newsConte
2、nt*/*=*/createtablenewsContent(IDintidentity(1,1)primarykey,Titlenvarchar(50)notnull,Contentntextnotnull,AddDatedatetimenotnull,CategoryIDintnotnull)go二、项目文件架构实现步骤为:4-3-6-5-2-1I项目描述用途项目引用关系实例所需文件相关方法1Web表现层Web页和控件引用BLLWebUI.aspxWebUI.aspx.csGetContent()2BLL业务逻辑层业务逻辑组件引用 IDAL,Model,使用DALFactory创建实例Co
3、ntent.csContentInfo GetContentInfo(int id)3IDAL数据访问层接口定义每个DAL实现都要实现的一组接口引用 ModelIContent.csContentInfo GetContentInfo(int id)4Model业务实体传递各种数据的容器无引用ContentInfo.cs5DALFactory数据层的抽象工厂创建反射,用来确定加载哪一个数据库访问程序集的类引用IDAL,Content.csIDAL.Icontent create()6SQLServerDALSQLServer数据访问层Microsoft SQL Server特定的Pet Sho
4、p DAL实现,使用了IDAL接口引用 ModelIDAL,DALFactory加载的程序集,实现接口里的方法。SqlHelper.csContent.csSqlDataReader ExecuteReader()PrepareCommand()ContentInfo GetContentInfo(int id)OracleDALOracle数据访问层7DBUtility数据库访问组件基础类GetSqlServerConnectionString得到数据库连接字符串,也可省去该项目,在SQLServerDAL.SqlHelper中用static readonly string SqlConne
5、ctionString代替。无引用实现步骤过程1、创建Model,实现业务实体。2、创建IDAL,实现接口。3、创建SQLServerDAL,实现接口里的方法。4、增加web.config里的配置信息,为SQLServerDAL的程序集。5、创建DALFactory,返回程序集的指定类的实例。6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。7、创建WEB,调用BLL里的数据操作方法。 注意: 1、web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。 2、DALFactory里只需要一个DataAccess类,7、创建WEB
6、,调用BLL里的数据操作方法。注意:1、web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。2、DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。3、项目创建后,注意修改各项目的默认命名空间和程序集名称。4、注意修改解决方案里的项目依赖。5、注意在解决方案里增加各项目引用。三、各层间的访问过程1、传入值,将值进行类型转换(为整型)。2、创建BLL层的content.cs对象c,通过对象c访问BLL层的方法GetContentInfo(ID)调用BLL层。3、BLL层方法GetContentInfo(ID)中取得数据访问层S
7、QLServerDAL的实例,实例化IDAL层的接口对象dal,这个对象是由工厂层DALFactory创建的,然后返回IDAL层传入值所查找的内容的方法dal.GetContentInfo(id)。4、数据工厂通过web.config配置文件中给定的webdal字串访问SQLServerDAL层,返回一个完整的调用SQLServerDAL层的路径给 BLL层。5、到此要调用SQLServerDAL层,SQLServerDAL层完成赋值Model层的对象值为空,给定一个参数,调用SQLServerDAL层的SqlHelper的ExecuteReader方法,读出每个字段的数据赋值给以定义为空的M
8、odel层的对象。6、SqlHelper执行sql命令,返回一个指定连接的数据库记录集,在这里需要引用参数类型,提供为打开连接命令执行做好准备PrepareCommand。7、返回Model层把查询得到的一行记录值赋值给SQLServerDAL层的引入的Model层的对象ci,然后把这个对象返回给BLL。8、回到Web层的BLL层的方法调用,把得到的对象值赋值给Lable标签,在前台显示给界面四、项目中的文件清单1、DBUtility项目(1)connectionInfo.csusingSystem;usingSystem.Configuration;namespaceUtility/Conn
9、ectionInfo的摘要说明。/publicclassConnectionInfopublicstaticstringGetSqlServerConnectionString()returnConfigurationSettings.AppSettingsSQLConnString;2、SQLServerDAL项目(1)SqlHelper.cs抽象类usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;usingDBUtility;namespaceSQLServerDAL/SqlHelper的摘要说明。/publicabstract
10、classSqlHelperpublicstaticreadonlystringCONN_STR=ConnectionInfo.GetSqlServerConnectionString();/用提供的函数,执行SQL命令,返回一个从指定连接的数据库记录集/例如:/SqlDataReaderr=ExecuteReader(connString,CommandType.StoredProcedure,PublishOrders,newSqlParameter(prodid,24);/SqlConnection有效的SQL连接字符串/CommandType:CommandType.Text、Comm
11、andType.StoredProcedure/SQL语句或存储过程/SqlParameter参数数组/SqlDataReader:执行结果的记录集publicstaticSqlDataReaderExecuteReader(stringconnString,CommandTypecmdType,stringcmdText,paramsSqlParametercmdParms)SqlCommandcmd=newSqlCommand();SqlConnectionconn=newSqlConnection(connString);/我们在这里用try/catch是因为如果这个方法抛出异常,我们目
12、的是关闭数据库连接,再抛出异常,/因为这时不会有DataReader存在,此后commandBehaviour.CloseConnection将不会工作。tryPrepareCommand(cmd,conn,null,cmdType,cmdText,cmdParms);SqlDataReaderrdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);cmd.Parameters.Clear();returnrdr;catchconn.Close();throw;/ 为执行命令做好准备:打开数据库连接,命令语句,设置命令类型(SQL语句或存储
13、过程),函数语取。 / /summary / paramname=cmd SqlCommand组件 /param / p/为执行命令做好准备:打开数据库连接,命令语句,设置命令类型(SQL语句或存储过程),函数语取。/SqlCommand组件/SqlConnection组件/SqlTransaction组件,可以为null/语句类型:CommandType.Text、CommandType.StoredProcedure/SQL语句,可以为存储过程/SQL参数数组privatestaticvoidPrepareCommand(SqlCommandcmd,SqlConnectionconn,Sq
14、lTransactiontrans,CommandTypecmdType,stringcmdText,SqlParametercmdParms)if(conn.State!=ConnectionState.Open)conn.Open();cmd.Connection=conn;cmd.CommandText=cmdText;if(trans!=null)cmd.Transaction=trans;cmd.CommandType=cmdType;if(cmdParms!=null)foreach(SqlParameterparmincmdParms)cmd.Parameters.Add(par
15、m);(2)Content.cs类usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;usingModel;usingIDAL;namespaceSQLServerDAL/Content的摘要说明。/publicclassContent:IContentprivateconststringPARM_ID=ID;privateconststringSQL_SELECT_CONTENT=SelectID,Title,Content,AddDate,CategoryIDFromnewsContentWhereID=ID;publicCont
16、entInfoGetContentInfo(intid)/创意文章内容类ContentInfoci=null;/创建一个参数SqlParameterparm=newSqlParameter(PARM_ID,SqlDbType.BigInt,8);/赋上ID值parm.Value=id;using(SqlDataReadersdr=SqlHelper.ExecuteReader(SqlHelper.CONN_STR,CommandType.Text,SQL_SELECT_CONTENT,parm)if(sdr.Read()ci=newContentInfo(sdr.GetInt32(0),sdr
17、.GetString(1),sdr.GetString(2),sdr.GetDateTime(3),sdr.GetInt32(4),sdr.GetInt32(5),sdr.GetString(6);returnci;3、Model项目(1)contentInfo.csusingSystem;namespaceModel/Class1的摘要说明。/publicclassContentInfoprivateint_ID;privatestring_Content;private string _Title; private string _From; private DateTime_AddDat
18、e; private int _clsID; private int _tmpID; / summary / 文章内容构造函数 / /summary / paramname=id 文章流水号IDprivatestring_Title;privatestring_From;privateDateTime_AddDate;privateint_clsID;privateint_tmpID;/文章内容构造函数/文章流水号ID/文章内容/文章标题/文章来源/文章的分类属性ID/文章的模板属性IDpublicContentInfo(intid,stringtitle,stringcontent,stringfrom,DateTimeaddDate,intclsid,inttmpid)this._ID=id;this._Content=content;this._Title=title;this._
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2