当前位置: 首页 > 图文教程 > 网络编程 > ASP > 用XML数据岛解决用户界面问题 - 3

ASP
对连串英文自动换行的解决方法 IE5.5
怎样写你自己的EMAIL组件(原理)
ASP中有关timeout超时的体会
用ASP实现从SQL Server导出数据到Access
ASP向NT域中加一个用户
ASP乱码的解决方法
关于 aspsmartupload 注册问题
利用XML不离开页面刷新数据
IIS 处理 SEARCH 请求漏洞
不用组件实现上载功能(1)
不用组件实现上载功能(2)
在网页中实现OICQ里的头像选择的下拉框
仅用xsl和asp实现分页功能
如何使用context()方法将数据置入表格(XML)
利用ASP从远程服务器上接收XML数据
将数据库里面的内容生成EXCEL
怎样在ASP里面创建统计图表
加密你的Access数据库
利用global.asp定时执行ASP
加密QueryString数据

ASP 中的 用XML数据岛解决用户界面问题 - 3


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 32 ::
收藏到网摘: n/a

  把数据库的表数据保存到文件中

  我曾答应向你展示如何避免每次请求都要读取数据库和串联成XML字符串的步骤。答案就是把数据库的表数据保存到文件中;这样做有几个好处。读取文件比查询数据库并把记录集格式化成XML要快。这样做也可以简化你的HTML文件,因为你只需在HTML中包含对XML的引用。最后这样做使数据对于客户端来说是透明的。如果你以Listing 1中的方式发送XML标记符的话,用户可以通过IE的"查看/源文件"看到数据。使用文件引用的话,用户只能看到引用标记符,而非数据。

  只要你的数据库记录不是永不改变的,你就还得在数据改变时查询数据库。例如,你可以在SQL Server中写一个触发器,当"Location"表发生改变时更新"LastChanged"表中的日期和时间(Listing 3)。对于每一次请求,你可以比较
Location"表与保存数据的XML文件的日期和时间。本文使用的Access数据库不支持触发器,但你可以编写代码来实现当"Location"表发生改变时更新"LastChanged"表的功能。你也可以每隔一段时间,如一天或一个小时就重新生成文件。

  用Scripting.FileSystemObject 和 Scripting.TextStream对象写XML文件到硬盘中。为了能写XML文件,你必须给IUSR_MACHINENAME匿名用帐户足够的权限以打开、读、写和删除文件(如果你使用的是NTFS格式的分区硬盘的话)。如果你只想利用XML数据重新在客户端建立一个记录集的话,你可以用adPersistXML方法保存记录集到硬盘中。如果你这样做的话,必须注意ADO为了能从XML数据重新建立记录集而把记录集保存成优化的格式。这样生成的XML对于XSL查询语句而言即
不美观又不方便:

  Dim fs

  Dim ts

  dim aFilename

  aFilename = Server.MapPath _("/XMLDataIslands") & _"\locations.xml"

  set fs = Server.CreateObject _("Scripting.FileSystemObject")

  set ts = fs.OpenTextFile _(aFilename, ForWriting)

  ts.Write s

现在,当你收到一个请求时,查看"LastChanged"表中日期和时间:

  Dim SQL

  Dim R

  Dim conn

  dim tableModifyDate

  set conn = Server.CreateObject _("ADODB.Connection")

  conn.mode = adModeRead

  conn.open "DSN=CheapPC;UID=sa;PWD="

  SQL = "SELECT " & _"LastChanged.LastChanged " & _"FROM Locations WHERE " & _"Tablename='Locations'"

  set R = conn.execute(SQL,,adCmdText)

  tableModifyDate = R("LastChanged")

接下来,通过获取一个File对象来比较XML文件与tableModifyDate的日期和时间,并查看它的FileCreatedOn属性值:

  dim fs

  dim aFile

  dim rewriteFile

  rewriteFile=False

  set fs = Server.CreateObject _("Scripting.FileSystemObject")

  if fs.FileExists(aFilename) then

    Set aFile = fs.GetFile(aFilename)

    If aFile.DateCreated < _LocationsModifiedDate Then

     rewriteFile=True

    end if

  else

    rewriteFile=true

  end if
  如果XML文件不存在或需要更新时,你必须写文件(Listing 4)。这样就重新从数据库读取数据并格式化成XML,但你只需覆盖旧的XML文件而不必把XML发送到浏览器。现在在你的HTML文件中,你只需引用该XML文件即可。当你的XML文件不需要更新,你的服务器会略过数据的读取与格式化,只是简单地读取XML数据到浏览器。从整体上看,读取XML数据为你的服务器节省了大量的处理能力,使你的页面更有效率。


源代码可以从http://www.yesky.com/34670816/xmldaima.zip下载