数据访问层常见的方法有哪几种?

ASP.NET中

一、响应重定向方法

响应重定向方法是目前为止将一个网页重定向到另一个网页的最简单的方法的最简单的方法。当Web服务器接到一个重定向请求后,它会将一个响应头送给客户端,这将导致客户端发送一个新的请求到服务器。按句话说,一个重定向请求实际上是两个请求响应:一个是最初的请求响应,另一个是新的重定向请求响应。

在ASP.NET中实现重定向很容易。下面的代码演示了如何使用Response.Redirect方法实现网页重定向:

protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx");
}

要注意的是重定向请求只是一个GET请求,这就意味着我们不能从源页中通过重定向命令提交数据。但是我们可以在重定向中使用查询字符串来传递数据。如下面代码所示:

protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx?userName=" + UserName.Text));
}

上面的例子将一个查询字符串作为参数传递给了Response.Redirect方法的目标URL。我们可以通过如下的代码获得源数据。
protected void Page_Load(object sender, EventArgs e)
{
string userName = Request["userName"];
}

二、服务器传输方法

和依赖于客户端向另一个新页发请求不同,服务器传输是一种服务器重定向技术,这种技术通过简单的改变Web服务器所处理的代码来达到请求一个新页的目的。当被请求页和源页面在同一个服务器时,服务器传输要比 Response.Redirect方法更有效,这是由于这种技术可以避免额外的开销,仅仅使用服务器的资源就可以进行重定向。要注意的这种技术有一个副作用,在页面进行重定向时,客户端的URL仍然会保持源页面的URL,这可能会使客户认为他们所获得的数据是源页面产生的。当然,在大多数情况下,这不是问题,但是这将使调试变得更困难。

Server.Transfer方法还可以保存初始页的 HttpContext。因此,目标页可以访问源页面的值。我们可以使用FormsCollection属性来从目标页面中获得源页面的值。首先,要确定我们使用了被重载的方法,这个方法有两个参数:目标URL和一个Boolean类型的值,告诉服务器是否保存用于描述源页面值的Form。如下面的代码所示:

Server.Transfer("Menu.aspx",true);
然后,我们在目标页面中获得一个叫txtUserName的Textbox控件的值的代码如下:
object obj = Request.Form["txtUserName"];

三、Response.Redirect和Server.Transfer的比较

由于Response.Redirect方法要进行两次请求响应操作,因此,我们应该在对性能要求高的网站尽量避免使用这种方法。然而,只从技术上说,使用redirect方式确实可以从一个网页跳到另一个网页。相比之下,Server.Transfer会更有效率,但是跳转的范围仅限于同一个Web服务器的不同网页。从本质上说,我们可以使用 Server.Transfer来消除不必要的请求响应操作。如果我们需要重定位到不同服务器的网页,就需要使用Response.Redirect方法。

四、跨页提交概述

在ASP.NET 2.0中,我们可以通过实现IbuttonControl接口提交给不同的WebForm,来实现跨网页的提交。和Response.Redirect类似,跨网页提交是一个基于客户端的传输机制,但也有点象Server.Transfer,目标网页也可以访问源网页的数据。为了使用跨网页提交,我们需要在源网页中的PostBackUrl属性中指定目标URL。

五、实现跨网页提交

这部分将讨论一下如何在ASP.NET2.0中实现跨网页提交。为了开始我们的学习,假设有两个Web页,一个是源Web页,另一个是目标Web页。在源网页中初始化了使用按钮进行的跨网页提交操作。我们首先必须设置目标网页按钮的PostBackUrl属性,顺便说一句,所有实现了System.Web.UI.WebControls.IbuttonControl接口的Web控件都有跨网页提交的特性。下面的代码将演示这一过程。

PostBackUrl="~/target.aspx" text = "Post to a target page"/>
当我们设置PostBackUrl属性时,ASP.NET框架将相应的控件绑定到一个新的叫WebForm_DoPostBackWithOptions的JavaScript函数,产生的Html代码如下:

onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "","Target.aspx", false, false))" id="btnSubmit" />

对于上面的html代码来说,当用户单击按钮时,浏览器将提交目标URL(Target.aspx),而不是源URL。

六、从目标页面中获得源页面控件的值

ASP.NET2.0提供了一个叫PreviousPage的新的属性,这个属性无论在何时当前页面进行跨网页提交操作时都会指向源页面。要注意的是,当源页面和目标页面在不同的应用程序中时,这个属性包含null(这个null并不是未初始化的意思)。还有要注意的是当目标网页访问PreviousPage属性时可以获得源页面的数据,ASP.NET运行时装载并执行了源页面。这将引发ProcessChildRequest事件的发生。而且,它还会引发Page_Init事件、Page_Load和任何其他的源页面按钮单击事件。

因此,我们要避免由于不小心进行误操作,所以最好通过 IsCrossPostBack属性来确认是否为一个跨网页提交发生,如果这个属性值为true,那么目标网页就是通过一个跨网页提交动作而调用的。如果是通过另外一种方式调用的(如一般的请求、Response.Redirect或是一个Server.Transfer),这个属性的值为false。下面的例子演示了如何使用这个属性。

if ( PreviousPage.IsCrossPagePostBack)
{
//执行代码
}
//******************************************
这个PreviousPage属性在Server.Transfer和跨网页提交中都可以使用。在ASP.NET2.0中,我们可以在调用Server.Transfer操作后使用PreviousPage属性在目标页面中来获得源页面的数据,代码如下:
*******************************************//
{
Server.Transfer("menu.aspx");
}

protected void Redirect_Click(object sender, EventArgs e)

//在这个接收面中我们现在可以获得Web页面的数据,代码如下:

protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
TextBox txtBox = (TextBox)
PreviousPage.FindControl("txtUserName");
if (textBox != null)
string userName = textBox.Text;
//其他可执行的代码
}
}

要注意的是上面的代码必须将txtUserName控件转换为TextBox类型,以便可以访问其中的值。

七、使用PreviousPageType

PreviousPageType属性提供了在跨网页操作中访问源页面的强类型能力,下面让我们演示一下如何不通过任何类型转换来从源页面中获得控件值。代码如下:

< asp:Textbox ID="txtUserName" Runat="server" />
< asp:Textbox ID="txtPassword" Runat="server" />
< asp:Button ID="Submit" Runat="server" Text="Login"PostBackUrl="Menu.aspx" />

要注意的是单击按钮可以重定向到一个叫“Menu.asp”的目标页。这个目标页可以使用如下的代码获得用户名和密码:

八、保存视图状态

对于跨网页提交来说,ASP.NET2.0 内嵌了一个叫__POSTBACK的隐藏字段,这个字段包含了关于源页面的视图信息 -- 也就是由源页面提供了,包含了一个带有一个非空PostBackUrl属性值的服务端控件。目标页可以使用__POSTBACK中的信息来获得源页面的视图状态信息。代码如下:

if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&
PreviousPage.IsValid)
{
TextBox txtBox = PreviousPage.FindControl("txtUserName");
Response.Write(txtBox.Text);
}

在上面的代码中核对了用于确保PreviousPage属性不为 null的检查代码。顺便提一下,如果目标页和源页面不在同一个应用程序中,这个PreviousPage属性的值为null。只有在进行跨网页提交操作时,IsCrossPagePostBack属性才为true。

这个跨网页提交的特性,是ASP.NET2.0中最强有力的特性之一,这种技术将允许在一个页面中提交到另外一个页面,并且可以在目标页面地无缝地操作源页面中的数据。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-29
增删改查

数据访问层常见的方法有哪几种?
如果我们需要重定位到不同服务器的网页,就需要使用Response.Redirect方法。 四、跨页提交概述 在ASP.NET 2.0中,我们可以通过实现IbuttonControl接口提交给不同的WebForm,来实现跨网页的提交。和Response.Redirect类似,跨网页提交是一个基于客户端的传输机制,但也有点象Server.Transfer,目标网页也可以访问源网页的数据。为了...

常见的数据收集方法都包括哪些
常见的数据收集方法都包括访问调查、邮寄调查、电话调查、座谈会、个别深度访问、网上调查。1、访问调查:访问调查又称派员调查,它是调查者与被调查者通过面对面地交谈从而得到所需资料的调查方法。2、邮寄调查:邮寄调查是通过邮寄或其他方式将调查问卷送至被调查者,由被调查者填写,然后将问卷寄回或投...

三层结构中数据访问层的主要功能是什么
从业务规则层接收请求,从数据服务获取数据或向其发送数据。 使用存储过程获取数据,并可选用 ADO.NET 向数据库发送数据,将数据库查询结果返回到业务规则层,作为ADO.NET 数据集。数据数据访问层主要看数据层里面有没有包含逻辑处理,实际上各个函数主要完成各个对数据文件的操作。而不必管其他操作。业务...

JAVA访问数据库的4种方法是哪些
(1)JDBC-ODBC桥加ODBC驱动程序 JavaSoft桥产品利用ODBC驱动程序提供JDBC访问。注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。因此,这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序...

java中dao层和service层的区别是什么?
dao层:dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查 service层:service层叫服务层,被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。至于为什么service层要使用接口来定义有以下几点好处:在java...

三层结构主要包括哪些类的设计及各类的主要作用
一般的三层为 数据访问层,业务逻辑层,表示层。另外还有一个实体层。实体层主要对应数据库中的表,一般是一张表对应一个实体类。实体类在项目中主要做数据载体。数据访问层就是专门与数据库进行数据交互的层,常见做法就是写一个DBHelper类,这个类提供数据库连接,数据库命令操作,返回数据,是一个通用的类,然后里面也...

ioc和aop的区别?
主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。4 主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改 变这些行为的时候不影响业务逻辑的代码。

图解几种常见的软件架构模式
方法\/步骤分层模式 这种模式也称为多层体系架构模式。它可以用来构造可以分解为子任务组的程序,每个子任务都处于一个特定的抽象级别。每个层都为下一个提供更高层次服务。一般信息系统中最常见的是如下所列的4层。表示层(也称为UI层)应用层(也称为服务层)业务逻辑层(也称为领域层)数据访问层(也称...

访问数据库的接口有哪些
访问数据库的接口有多种,常见的主要有ODBC、JDBC、ADO等。解释如下:ODBC ODBC是一种通用的数据库访问接口,支持多种数据库系统。它通过SQL来执行对数据库的访问和操作。使用ODBC接口,开发者可以编写一次应用程序,并连接到不同的数据库系统上。JDBC JDBC是为Java应用程序提供的数据库访问接口。它允许...

常用的数据分析方法有哪些?
常用的列了九种供参考: 一、公式拆解 所谓公式拆解法就是针对某个指标,用公式层层分解该指标的影响因素。举例:分析某产品的销售额较低的原因,用公式法分解 二、对比分析 对比法就是用两组或两组以上的数据进行比较,是最通用的方法。 我们知道孤立的数据没有意义,有对比才有差异。比如在时间维度上的同比和环比、...

相似回答
大家正在搜