②如果打算重复性地检索少量数据,或者检索的数据在每次使用数据时都需要尽可能地更新时,也最好使用DataReader。
在以下场合下考虑使用DataSet。
①如果应用程序不是立即“卸载”查询结果时,或者有大量的处理(如两次数据访问之间的事务逻辑处理)时,最好使用DataSet。DataSet检索数据后,将检索结果存放到内存中,并同时把连接返回到数据库连接池中,这样,DataReader可以在处理完成之前保持连接锁定在开启状态。这个特性会非常容易导致高流量的应用程序耗尽所有可用的数据库连接。
②当需要多次操作数据时,最好使用DataSet。例如,当多个控件需要获取同样的数据时,使用DataSet就比DataReader更加合适。这是因为后者只能读一次,一个DataReader只能对应一个控件,要实现此操作,每个控件就都要进行一次数据检索了。
③当数据的变化不是很频繁(即不要求每次使用数据时都从数据库重新检索它以保证它获得及时的更新)时,最好使用DataSet。DataSet可以保存在一个会话(Session)或者程序变量中,它也可以用System.Web.Caching.Cache类进行缓冲。这样可以降低从数据库直接检索数据的次数,使应用程序的性能有所提高。
④当建立返回检索数据的Web服务时,最好使用DataSet。由于DataSet是可串行化的,因此它可以作为返回值。而DataReader由于需要连续的数据库连接,因此它不能作为Web服务的返回值。
6.5ASP.NET
6.5.1ASP.NET概述
ASP.NET是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.NET提供许多比现在的Web开发模式强大的优势。主要有下列优点。
1.与传统的ASP比较
ASP采用VBScript作为主要编程语言,和大多数解释型语言一样,ASP致命的缺点是每次请求都要解释页面代码。ASP.NET则不同,它采用C、VB.NET等作为开发语言,基于.NET Framework之上,每次修改的代码编译成中间语言(MSIL)代码。加速了Web浏览速度,减轻了Web服务器负载,ASP.NET通过Code Behind文件、HTML页面和Web程序代码已经基本实现分离。ASP程序员习惯在HTML中直接嵌入代码,虽然ASP.NET仍然支持这样做,但是书中还是建议程序员克服这个困难,采用Code Behind文件来优化我们的网站结构。
2.执行效率的大幅提高
ASP.NET是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译。这样的执行效果,当然比一条一条地解释强很多。
3.世界级的工具支持
ASP.NET构架是可以用Microsoft(R)公司最新的产品Visual Studio.NET开发环境进行开发,WYSIWYG (What You See Is What You Get,所见即为所得)进行编辑。这些仅是ASP.NET强大化软件支持的一小部分。
4.强大性和适应性
因为ASP.NET是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎所有的平台上。通用语言的基本库、消息机制和数据接口的处理都能无缝地整合到ASP.NET的Web应用中。ASP.NET同时也是languageindependent语言独立化的。所以,可以选择一种最适合自己的语言来编写程序,或者用很多种语言来编写程序,现在已经支持的有C(C++和Java的结合体)、VB和J。
将来,这样的多种程序语言协同工作的能力保护现在的基于COM+开发的程序,能够完整地移植于ASP.NET。
5.简单性和易学性
ASP.NET使运行一些很平常的任务如表单的提交、客户端的身份验证、分布系统和网站配置变得非常简单。例如,ASP.NET页面构架允许我们建立自己的用户分界面,使其不同于常见的VB Like界面。另外,通用语言简化开发使把代码结合成软件变得异常简单。
6.高效可管理性
ASP使用一种字符基础的、分级的配置系统,使服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种被称为“Zero Local Administration”的哲学观念使ASP.NET基于应用的开发更加具体和快捷。一个ASP.NET的应用程序在一台服务器系统的安装只需要简单地复制一些必需的文件,不需要系统的重新启动,一切就是这么简单。
7.多处理器环境的可靠性
ASP.NET已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大地提高运行速度。即使现在的ASP.NET应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高它们的效能,但现在的ASP却做不到这一点。
8.自定义性和可扩展性
ASP.NET设计时考虑了让网站开发人员可以在自己的代码中自己定义“plug in”的模块。这与原来的包含关系不同,ASP.NET可以加入自己定义的任何组件。网站程序的开发从来没有这么简单过。
9.全性
基于Windows认证技术和应用程序配置,可以确信我们的源程序是绝对安全的。
6.5.2ASP.NET举例
1.Session的使用及概念
Session对象可以用来存储需要在服务器的多次请求—应答期间和对网页的请求期间进行维护的指定对话的信息。Session对象是每个对话存在的基础,也就是说不同的客户端生成不同的Session对象。存储在对话状态变量中的数据存在的周期较短,时间可以进行设置。
每个web应用程序必须有一个名字为web.config的配置文件,它是基于XML文件的。下面是一个名字为sessionState的对话:
若要使默认的超时时间(20分钟)延长一倍,可以将下列内容添加到应用程序的web.config文件:
Timeout=”40”
/sessionState>;
默认情况下,ASP.NET像ASP一样,在处理请求的同一进程中存储会话状态。如果cookie不可用,可以通过将会话标识符添加到URL来跟踪会话。若要启用此功能,请设置以下内容:
cookieless=”true”
/sessionState>;
cookieless选项的值为true或false。当其值为false(默认值)时,ASP.NET将使用HTTPcookie来识别用户;当其值是true时,ASP.NET将随机地生成一个唯一的号码,并将它放在被请求的文件的前面。这一号码是用来识别用户的,能够在IE的地址栏中看到它:http://localhost/(2yzakzez3eqxut45ukyzq3qp)/Default.aspx
在编程中随时可以使用session对象,不需要声明。
’存储信息
Session(”myname”)=”Mike”
’获得信息
myname=Session(”myname”)
2.cookie的使用及概念
cookie是存储在客户端文件系统的文本文件中或客户端浏览器对话的内存中的少量数据,浏览器对cookie的大小有限制,不能超过4096字节。可以用cookie检查用户在此前是否已经注册,以及保存用户的一些常用信息。
首先,创建cookie
’声明一个cookie变量
Dim cookie As HttpCookie
’判断CookieName是否存在,如果不存在创建它,存在就获取它
If Request.Cookies(”CookieName”) Is Nothing Then
cookie=New HttpCookie(”CookieName”)
Else
cookie=Request.Cookies(”CookieName”)
End If
’设置cookie过期时间为10秒
Dim ts As TimeSpan=New TimeSpan(0,0,10,0)
cookie.Expires=DateTime.Now.Add(ts)
’把cookie设为受管状态
Response.AppendCookie(cookie)
下面是利用cookie检查用户是否登录的一个VB.NET的例子。
if Request.Cookies(”username”)<;>;””then
’lbMessage是label控件的id
lbMessage.text=”你好!”&;Request.Cookies(”username”).Value
else
lbMessage.text=”你好!客人”
end if
保存用户常用信息,可以使用下面的代码:
Response.Cookies(”username”).Value=username;
3.如何在页面间传递参数
查询字符串提供了一种简单而受限制的页面传递信息的方法,可以方便地将信息通过URL从一个网页传递给另一个网页,但大多数浏览器和客户端装置都把URL的长度限制在255个字符长。还有就是,查询值是通过URL在网页间传递的,因此在有些情况下,安全就成了一个大问题。
带有查询字符串的URL如下所示:
http://www.examples.com/list.aspx?categoryid=1&;productid=101
当有客户端请求list.aspx后,可以通过下面的代码获取目录和产品信息:
Dim categoryid as string
Dim productid as string
categoryid=Request.Params(”categoryid”)
productid=Request.Params(”productid”)
4.如何设置web.config
ASP.NET资源的配置信息包含在一组配置文件中,每个文件都命名为web.config。每个配置文件都包含XML标记和子标记的嵌套层次结构,这些标记带有指定配置设置的属性。因为这些标记必须是格式正确的XML,所以特别要注意标记、子标记和属性是区分大小写的。如果大小写错误,在编译期会报错误。
在这里只介绍web.config中最常用、最重要的一些配置项:
自定义错误信息默认的设置为RemoteOnly。
如果要自定义出错页面,可以设置customErrorsmode=“On”或“RemoteOnly”,以启用自定义错误信息。设置为“Off”是禁用自定义错误信息。
可以如下设置:
这里RemoteOnly和On的区别就在于:自定义出错页面只对远程访问有效,本地还是显示调试信息。
mode=”InProc”
stateConnectionString=”tcpip=127.0.0.1:42424”
sqlConnectionString=”data source=127.0.0.1;user id=sa;password=”
cookieless=”false”
timeout=”20”
/>;
会话状态设置,默认会话模式为“InProc”及进程类会话,此模式下会话状态与ASP.NET辅助进程一起执行。如果IIS服务器重新启动,则所有的会话都会遭到破坏。
Mode还可以设置为StateServer模式,此模式将ASP.NET状态服务(存储会话状态信息)运行在远程服务器上。即使IIS重启,会话状态也能得以保留。SQL Server模式是利用SQL Server来保存会话状态,但此模式效率比较低,一般不采用。
默认情况下,ASP.NET使用cookie标识哪些请求属于特定的会话。如果cookie不可用,则可以通过将会话标识符添加到URL来跟踪会话。若要禁用cookie,请设置sessionStatecookieless=“true”。