手机版

ASP NET的三层架构详细说明了如何实现三层架构

时间:2021-10-31 来源:互联网 编辑:宝哥软件园 浏览:

一.数据库

/*============================================================================================*//* DBMS name : Microsoft SQL Server 2000 */*====================================================*/如果存在(从sysobjects中项目文件架构。

步骤如下:4-3-6-5-2-1。

实施步骤流程

1.创建模型并实现业务实体。

2.创建IDAL并实现接口。

3.创建SQLServerDAL并在接口中实现这些方法。

4.将web.config中的配置信息添加为SQLServerDAL的程序集。

5.创建DALFactory并返回程序集的指定类的实例。

6.创建BLL,调用DALFactory,获取程序集指定的类的实例,完成数据操作方法。

7.创建WEB并调用BLL的数据操作方法。

注意:

1.web.config中的程序集名称必须与SQLServerDAL中的输出程序集名称一致。

2.DALFactory中只需要一个DataAccess类,就可以创建所有的程序集实例。

3.创建项目后,注意修改每个项目的默认命名空间和程序集名称。

4.注意修改解决方案中的项目依赖关系。

5.注意在解决方案中添加各种项目引用。

三.层间访问过程。

1.传入一个值,并将该值转换为整数。

2.创建BLL层的content.cs对象C,通过访问BLL层的对象C的方法GetContentInfo(ID)调用BLL层。

3.从BLL层方法GetContentInfo(ID)获取数据访问层中的SQLServerDAL实例,实例化IDAL层中的接口对象DAL,它是由工厂层DALFactory创建的,然后返回方法dal。由IDAL层中的传入值搜索的内容的GetContentInfo(id)。

4.数据工厂通过web.config配置文件中给出的webdal字符串访问SQLServerDAL层,并返回调用SQLServerDAL层到BLL层的完整路径。

5.要调用SQLServerDAL层,SQLServerDAL层完成赋值,模型层的对象值为空。给定一个参数,调用SQL server数据库层的SqlHelper的ExecuteReader方法,读取每个字段的数据,并将其分配给定义为null的模型层的对象。

6.SqlHelper执行sql命令并返回指定连接的数据库记录集。在这里,您需要引用参数类型,并为打开连接命令的执行提供PrepareCommand。

7.返回模型层将从查询中获得的一行记录值分配给SQL Server DAL层中引入的模型层的对象ci,然后将该对象返回给BLL。

8.回到Web层的BLL层的方法调用,将得到的对象值赋给标签标签,并显示到前台的界面。

四.项目中的文档列表。

1.DBUtility项目。

connectionInfo.cs

使用系统;使用系统。配置;命名空间实用程序{///summary///connectioninfo的摘要描述。////摘要公共类ConnectionInfo { public static string GetSqlServerConnectionString(){ return ConfigurationSettings。AppSettings[' SQLConnString '];} }}2.SQLServerDAL数据库项目。

(1)SqlHelper.cs抽象类。

使用系统;使用系统。数据;使用系统数据。程序使用数据访问层命名空间SqL SERVER DaL {///summary///SqL helper的摘要说明////摘要公共抽象类SqlHelper { public static readonly string CONN _ STR=ConnectionInfo .GetSqlServerConnectionString();///摘要///用提供的函数,执行结构化查询语言命令,返回一个从指定连接的数据库记录集////摘要///备注///例如:///SqlDataReader r=ExecuteReader(construction,CommandType .StoredProcedure,' PublishOrders ',new SqlParameter('@prodid ',24));////备注///param name=' connectionString ' sqlconnection有效的结构化查询语言连接字符串/param///param name=' commandType ' commandType:commandType .文本、命令类型StoredProcedure/param///param name=' commandText ' SQL语句或存储过程/param///param name=' commandParameters ' sqlparameter[]参数数组/param ///returnsSqlDataReader:执行结果的记录集/返回公共静态SqlDataReader ExecuteReader(字符串连接字符串,命令类型,命令类型,字符串cmdText,params SqlParameter[]cmd farms){ SqlCommand cmd=new SqlCommand();SqlConnection conn=new SqlConnection(CONSTRING);//我们在这里用尝试/捕捉是因为如果这个方法抛出异常,我们目的是关闭数据库连接,再抛出异常, //因为这时不会有数据阅读器存在,此后命令行为。关闭连接将不会工作尝试{ PrepareCommand(cmd,conn,null,cmdType,cmdText,cmdParms);SqlDataReader rdr=cmd .ExecuteReader(CommandBehavior .CloseConnection);cmd .参数。清除();返回rdr}捕获{ conn . Close();扔;} } ///摘要///为执行命令做好准备:打开数据库连接,命令语句,设置命令类型(SQL语句或存储过程),函数语取////summary////param name=' cmd ' sqlcommand组件/param///param name=' conn ' sqlconnection组件/param///param name=' trans ' sqltransAction组件,可以为null/param///param name=' cmdType '语句类型:命令类型.文本、命令类型StoredProcedure/param///param name=' cmdText ' SQL语句,可以为存储过程/param///param name=' cmdParms ' SQL参数数组/param private static void prepare命令(SqlCommand cmd,SqlConnection conn,SqlTransaction trans,CommandType cmdType,string cmdText,SqlParameter[]cmd parms){ if(conn . State!=ConnectionState .Open)conn . Open();cmd .连接=连接.CommandText=cmdTextif (trans!=null) cmd .交易=交易;cmd .CommandType=cmdTypeif (cmdParms!=null){ foreach(cmdParms中的参数参数)cmd .参数。添加(参数);} } }}(2)Content.cs类

使用系统;使用系统。数据;使用系统数据。程序使用模型;使用IDAL;命名空间SqLServerDal数据库{///摘要////内容的摘要说明////摘要公共类内容: I content { private const string PARM _ ID=' @ ID ';私有常量字符串SQL_SELECT_CONTENT='选择标识、标题、内容、添加日期、类别标识来自新闻内容其中标识=@标识;公共内容信息getcontent info(int id){//创意文章内容类ContentInfo ci=null//创建一个参数参数参数=新的SqlParameter(PARM标识,SqlDbType .BigInt,8);//赋上身份值帕尔马值=标识使用(SqlDataReader sdr=SqlHelper .ExecuteReader(SqlHelper .CONN_STR,命令类型.文本,SQL_SELECT_CONTENT,parm)) { if(sdr .Read()) { ci=new ContentInfo(sdr).GetInt32(0),sdr .GetString(1),sdr .GetString(2),sdr .GetDateTime(3),sdr .GetInt32(4),sdr .GetInt32(5),sdr .getString(6));} }返回ci;} }}3、型号项目

(1)contentInfo.cs

使用系统;命名空间模型{///summary////class 1的摘要说明////摘要公共类内容信息{私有int _ ID私有字符串_内容;私有字符串标题(_ t)私有字符串_从;私有DateTime _ adddate private int _ clsIDprivate int _ TMPiD///摘要///文章内容构造函数////summary ///param name='id '文章流水号ID/param ///param名称=“内容”文章内容/param ///param name='title '文章标题/param ///param name='from '文章来源/param ///param name='clsid '文章的分类属性ID/param ///param name='tmpid '文章的模板属性标识/参数公共内容信息(内部标识,字符串标题,字符串内容,字符串from,DateTime addDate,int clsid,int tmpid ) { this ._ ID=id这个。_内容=内容;这个_ Title=标题这个_从=从这个_添加日期=添加日期这个_ clsID=clsid这个_ tmpID=tmpid} //属性公共int ID { get { return _ ID} }公共字符串内容{获取{ return _ Content} }公共字符串标题{ get { return _ Title} }公共字符串From { get { return _ From} }公共日期时间AddDate { get { return _ AddDate} } public int ClsId { get { return _ ClsId;} } public int TMPid { get { return _ TMPid;4、IDAL项目

(1)图标内容

使用系统;使用模型;命名空间IDAL{ ///摘要/文章内容操作接口////摘要公共接口图标内容{ ///摘要///取得文章的内容////summary ///param name='id '文章的ID/param///returns/returns content info get content info(int ID);}}5、DALFactory项目

(1)内容

使用系统;使用系统。反思;使用系统。配置;使用IDAL;命名空间DALFactory{ ///summary ///工产模式实现文章接口////摘要公开课内容{公静态IDAL .IContent Create() { //这里可以查看木豆接口类字符串路径=系统。配置。配置设置。应用设置['WebDAL'].ToString();字符串类名=路径。内容;//用配置文件指定的类组合返回(IDAL .组件。加载(路径)。CreateInstance(类名);6、BLL项目

(1)内容

使用系统;使用模型;使用IDAL;命名空间BLL{ ///摘要////内容的摘要说明////摘要公共类内容{公共内容信息获取内容信息(int id){//取得从数据访问层取得一个文章内容实例IContent dal=DALFactory .内容。create();//用木豆查找文章内容返回达尔. GetContentInfo(id);} }}7、网络项目

1)、网络配置:

文件添加键=' SQLConnString '值='数据源=本地主机持续安全信息=真;初始目录=新闻数据库;用户标识=sapassword='/add key=' WebDal ' value=' SqL ServerDal '//app settings 2)、WebUI.aspx

“% @”页面语言=“c#”代码在=“webui”之前。aspx。cs ' AutoEventWireup=' false ' Inherits=' Web .WebUI"%!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN ' HTML HEAD title webui/title meta name=' GENERATOR ' Content=' Microsoft Visual Studio .' NET 7.1 '元名称='CODE_LANGUAGE '内容='C# '元名称='vs_defaultClientScript '内容='JavaScript '元名称='vs_targetSchema '内容=' http://schemass。微软。com/intellisense/ie5 '/HEAD body MS _ POSITIONING=' GridLayout '表单id='Form1 '方法='post' runat='server' FONT '宋体/FONT表格宽度='600 '边框=' 1 ' tr TD style=' width : 173 px '/TD TD TD ASP :标签id=' LBltitle ' runat=' server '/ASP :标签/TD/tr TD style=' width : 173 px;高度: 22px/TD TD TD style='高度: 22px ' ASP :标签id=' lbldata time ' runat=' server '/asp:标签/TD/tr TD style='宽度: 173 px '/TD TD TD TD TD ASP :标签id=' lblContent ' runat=' server '/asp:标签/TD/tr TD style='宽度: 1700 px '/TD TD/TD/tr tr TD style=' width : 173 px '/TD/TD/tr TD style=' width : 173 px '/TD/TD/tr tr TD style=' width : 173 px '/TD TD TD TD ASP 3360 l后台调用显示:

使用系统;使用系统。收藏品;使用系统组件模型.使用系统。数据;使用系统。绘图;使用系统网络.使用系统网络。元素的使用系统网络。用户界面使用系统。网络控件;使用系统网络。UI。HtmlControls使用BLL;使用模型;命名空间myWeb{ ///summary ///WebForm1的摘要说明////总结公开课WebUI :系统。受保护的系统。网页控件标签标题;系统受保护网络。ui。webcontrols。标注lbldata时间;系统受保护网络。ui。web控件。标签lblContent系统受保护网络。ui。webcontrols。标签lblMsg私有ContentInfo ci私有无效页面加载(对象发送者,系统EventArgs e) { if(!页面IsPostBack){ GetContent(' 1 ');} } private void GetContent(字符串id) { int ID=WebComponents .清理StrIng。GetInt(id);内容c=新内容();ci=c . GetContentInfo(ID);如果(ci!=null) { this.lblTitle.Text=ci .标题;this.lblDataTime.Text=ci .添加日期。ToString(' yyyy-MM-DD ');this.lblContent.Text=ci .内容;} else { this.lblMsg.Text='没有找到这篇文章;} } #区域网站窗体设计器生成的代码覆盖受保护的init(EventArgs e)上的void {////CODEGEN:该调用是ASP。网网窗体设计器所必需的//初始化组件();基地on init(e);} ///摘要///设计器支持所需的方法-不要使用代码编辑器修改///此方法的内容////summary private void initialize component(){ this .负载=新系统事件处理程序(这个. page _ Load);} #endregion }}4)、网络组件项目(1)CleanString.cs

使用系统;使用系统。文字;命名空间我的网页.WebComponents {///summary///clean string的摘要说明////摘要公共类清理字符串{公共静态int GetInt(字符串InputString){尝试{返回转换} .ToInt32(输入字符串);} catch { return 0;} }公共静态字符串输入文本(字符串inputString,int maxLength){ StringBuilder retVal=new StringBuilder();//如果((inputString!=null) (inputString!=字符串空){输入字符串=输入字符串.trim();//如果客户端最大长度//字段被绕过,则截断字符串,以防止缓冲区溢出if (inputString .长度(最大长度)输入字符串=输入字符串.子字符串(0,MaxLength);//在正则//表达式验证器为(int I=0;我输入字符串。长度;I){ switch(InputString[I]){ case ' ' ' : retVal .追加(' ' ');打破;案例' : retVal .追加("");打破;案例' : retVal .追加("");打破;默认值: retVal .追加(InputString[I]);打破;} } //用空格返回值替换单引号。替换(""、"");}返回retVal .ToString();} }}以上就是ASP .网三层架构的全部内容,希望对大家的学习有所帮助。

版权声明:ASP NET的三层架构详细说明了如何实现三层架构是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。