|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
本段文章节选自铁道出版社新出的《用BackOffice建立Intranet/Extranet应用》一书。本 书详尽地讲述了如何使用微软BackOffice系列产品来组建Intranet/Extranet应用。通过它您将把握NT的安装和设置、使用 IIS建立Web站点、通过ILS建立网络会议系统、用Exchange建立企业的邮件和协作系统、用SQL Server建立Web数据库应 用、用Proxy Server建立同Internet安全可靠的连接、用Media Server建立网络电视台/广播站、用Chart server建立功能 强盛的聊天室、用Site Server建立个性化的邮件列表和分析网站的访问情况、用Commerce Server建立B2B或B2C的电子商 务网站。此外本书还对网络的安全性进行了讨论,从而指导您建立一个更为健壮和安全的网络应用。阅读本书之后,您将 发现实现丰富多彩的网络应用原来这样简朴…… 绝对原创,欢迎转载。但请务必保留以上文字。 最后,我们来介绍导出日期列表页面部分的代码。我们在前面通过IDC技术产生过日期的列表页面,但是在静态页面导出时 采用的方式与其不同。前面通过IDC所产生的页面在浏览器端通过Java来完成对每个日期产生最终页面的工作。这样会造成 产生的页面文件过于庞大。因为对于每个日期,都要包含下面的一段Java代码: <script> yue1=yue2; yue2=4; if (yue1!=yue2){ tt=0; if (yue1==0){ document.write(\\\'<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>1999-4月</h2></tr></th><tr><td>星期日 </td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr><tr>\\\') }else{ document.write(\\\'</tr></table>\\\') document.write(\\\'<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>1999-4月</h2></tr></th><tr><td>星期日 </td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr><tr>\\\') } } ri=22; xingqi=5; if (tt!=0){ if (xingqi<7) { document.write(\\\'<td><FONT SIZE="+1"><a href="goto.idc?day=1999-04-22" TARGET="goto"><b>22</b></a></FONT></td>\\\'); }else { document.write(\\\'<td><FONT SIZE="+1"><a href="goto.idc?day=1999-04-22" TARGET="goto"><b>22</b></a></FONT></td></tr><tr>\\\'); } }else{ tt=1; for (i=1;i < xingqi;i++){ document.write(\\\'<td></td>\\\'); } document.write(\\\'<td><FONT SIZE="+1"><a href="goto.idc?day=1999-04-22" TARGET="goto"><b>22</b></a></FONT></td>\\\'); if (xingqi==7){ document.write(\\\'</tr><tr>\\\'); } } </script> 假如为一年的报纸内容来生产一个页面的话,其大小可能会超过几百KB。这对于局域网来说,算不了什么。这几百KB 数据所带来的延迟用户一般是察觉不到的。因为在局域网上传送这些数据所耗费的时间可能还不到一秒。而对于Internet 用户,就不得不考虑其有限的带宽了。如此之大的页面文件所带来的延迟,恐怕是用户所不能承受的。所以必须缩小此页 面文件的尺寸。我们使用游标和流控制语句在进行静态页面导出的时候,在服务器端完成相应的判定工作。从而只生 产"纯"HTML文件。下面就是实现此功能的代码段: declare @dy int, @date varchar(20), @yue varchar(2), @yue2 varchar(2), @ri int, @xingqi int, @year int, @outchar varchar(1600), @tt int create table ##daylist (out varchar(1600)) set @yue2=\\\'00\\\' set @tt=0 declare point3 cursor for SELECT distinct dy=datepart(dy,riqi),date=left(convert(varchar(40),riqi,20),10), yue=convert(varchar(2),datepart(mm,riqi)),ri=datepart(dd,riqi),xingqi=datepart(dw,riqi),year=datepart (yy,riqi) FROM gaojian where kanwu = \\\'出版报\\\' order by year,dy for read only open point3 fetch point3 into @dy,@date,@yue,@ri,@xingqi,@year while (@@fetch_status=0) begin if @yue<>@yue2 begin set @tt=0 if @yue2=0 insert into ##daylist values(\\\'<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>\\\'+convert(varchar(4),@year)+ \\\'年\\\'+@yue+\\\'月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四 </td><td>星期五</td><td>星期六</td></tr>\\\') else insert into ##daylist values(\\\'</tr></table><TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>\\\'+ convert(varchar(4),@year)+\\\'年\\\'+@yue+\\\'月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二 </td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>\\\') end if @tt<>0 if @xingqi < 7 set @outchar=@outchar+\\\'<td><a href="\\\'+@date+\\\'/index.htm" TARGET="new">\\\'+convert(varchar(2), @ri) +\\\'</a></td>\\\' else set @outchar=@outchar+\\\'<td><a href="\\\'+@date+\\\'/index.htm" TARGET="new">\\\'+convert(varchar(2), @ri) +\\\'</a></td></tr><tr>\\\' else begin set @tt=1 set @outchar= case when @xingqi=1 then \\\'\\\' when @xingqi=2 then \\\'<td></td>\\\' when @xingqi=3 then \\\'<td></td><td></td>\\\' when @xingqi=4 then \\\'<td></td><td></td><td></td>\\\' when @xingqi=5 then \\\'<td></td><td></td><td></td><td></td>\\\' when @xingqi=6 then \\\'<td></td><td></td><td></td><td></td><td></td>\\\' when @xingqi=7 then \\\'<td></td><td></td><td></td><td></td><td></td><td></td>\\\' end if @xingqi < 7 set @outchar=@outchar+\\\'<td><a href="\\\'+@date+\\\'/index.htm" TARGET="new">\\\'+convert(varchar(2), @ri) +\\\'</a></td>\\\' else set @outchar=@outchar+\\\'<td><a href="\\\'+@date+\\\'/index.htm" TARGET="new">\\\'+convert(varchar(2), @ri) +\\\'</a></td></tr><tr>\\\' end insert into ##daylist values(@outchar) set @yue2=@yue set @outchar=\\\'\\\' fetch point3 into @dy,@date,@yue,@ri,@xingqi,@year end close point3 deallocate point3 execute sp_makewebtask @outputfile=\\\'d:testdaylist.htm\\\', @query=\\\'select * from ##daylist\\\', @templatefile=\\\'d:testrili.tml\\\', @codepage=936 drop table ##daylist 假如读者十分认识Java语言的话,可以看到此段代码同上面的Java代码具有相类似的结构。所不同的是,它是使用SQL 语言中的流控制语句来实现的。在其中我们使用了BEGIN…END、WHILE、IF…ELSE…和CASE等流控制语句。 流控制语句: 在SQL语言中,有下列流控制语句: ■ BEGIN…END:将多条SQL语句封装在其间,组成一个语句块。从而使这些语句作为一个整体来执行。 ■ IF…ELSE…:其语法结构如下。 IF 布尔表达式 {sql_statement | statement_block} [ELSE {sql_statement | statement_block}] 当IF后面的布尔表达式的值为真时,执行IF后面的语句或语句块;当布尔表达式的值为假时,执行ELSE后面的语句或语句 块。 ■ GOTO语句:其语法结构如下。 定义标号: label: 程序跳转: GOTO label GOTO语句强迫程序跳转到由标号标示之处的语句。 ■ WHILE语句:其语法结构如下。 WHILE布尔表达式 {sql_statement | statement_block} [BREAK] {sql_statement | statement_block} [CONTINUE] WHILE语句为一个循环语句,只要其后的布尔表达式的值为真,它就会一直执行下去。BREAK语句用于将程序从此循环中跳 出。而CONTINUE用于跳过其后的语句直接进入下一个循环。 ■ CASE语句:CASE语句有以下两种语法结构。 简朴CASE功能: CASE 输入表达式 WHEN 条件表达式 THEN 返回表达式 [...n] [ ELSE 返回表达式 ] END 其执行过程为:将输入表达式的值同各个条件表达式的值进行对比。假如同某个条件表达式的值一样,则返回THEN后的返 回表达式的值。假如没有条件表达式的值同输入表达式的值一样,则返回ELSE后的返回表达式的值。 搜索CASE 功能: CASE WHEN 布尔表达式 THEN返回表达式 [...n] [ ELSE 返回表达式 ] END 与前面的简朴CASE功能不同,搜索CASE功能没有输入表达式。其执行过程为:判定WHEN后的布尔表达式是否为真,假如为 真则输出THEN后的返回表达式的值并跳转到END后面的语句;假如为假则对下一个WHEN后的布尔表达式进行判定。假如所有 的WHEN后面的布尔表达式的值都为假,则返回ELSE后面的返回表达式的值。 上面的代码就是用搜索CASE功能的语法结构书写的,假如将其改为用简朴CASE功能的语法结构书写,其代码如下: case @xingqi when 1 then \\\'\\\' when 2 then \\\'<td></td>\\\' when 3 then \\\'<td></td><td></td>\\\' when 4 then \\\'<td></td><td></td><td></td>\\\' when 5 then \\\'<td></td><td></td><td></td><td></td>\\\' when 6 then \\\'<td></td><td></td><td></td><td></td><td></td>\\\' when 7 then \\\'<td></td><td></td><td></td><td></td><td></td><td></td>\\\' end 在此段代码中,我们还定义了一个临时表##daylist。用来保存程序生成的页面并最后将其输出。在SQL Server中,可以在 程序中建立用来保存临时结果数据的表。我们称之为临时表。临时表会在建立它的对话结束或涉及它的任务停止时自动被 系统删除。当然,我们也可以通过DROP TABLE语句来显示地将其删除。 临时表分为全局和局部两种。全局临时表可以被当前所有的对话使用,而局部临时表只能被建立它的对话使用。由于我们 将在一个扩展存贮过程中使用此表(这样相称于在另一个对话之中访问此表),所以我们选择建立一个全局临时表。全局 临时表和局部临时表的区别在于全局临时表的名字前有两个"#",而局部临时表的名字前只有一个"#"。 此段代码使用的导出模板文件rili.tml十分简朴,其代码如下: <html> <title>出版报</title> <BODY BACKGROUND="images/WB00703_.gif"> <BODY BGCOLOR="FFFFFF"> <%begindetail%> <%insert_data_here%> <%enddetail%> </TABLE> </body> </html> 最后导出的日期列表页面文件中仅仅包含简朴的HTML语句,其尺寸也大大地缩小了。从原来的几百KB缩小到了只有三 十KB左右。在本书配套光盘的SQLServer目录下,你可以找到通过此段代码生成的一个例子文件daylist.htm。 返回类别: 教程 上一教程: 后台遍历一个HTML页面 下一教程: ASP用于分页的两个函数 您可以阅读与"SQL SERVER静态页面导出技术(SQL SERVER WEB ASSISTANT)"相关的教程: · 用SQL SERVER为WEB浏览器提供图像3 · 用ASP实现从SQL SERVER导出数据到ACCESS · 如何在生成的静态页面中显示文章被阅读的次数 · 用WEB(ASP)方法实现SQL SERVER 数据库的备份和恢复 · 在静态页面中显示文章被阅读的次数 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |