SQL Server静态页面导出技术


本段文章节选自铁道出版社新出的《用Backoffice建立Intranet/Extranet应用》一书(现已在海淀图书城有售,外地或者需要送货上门的读者可以到www.wanbook.com.cn或www.e-bookshop.com.cn上在线购买。本书书号为ISBN7113039448)。本书详尽地讲述了如何使用微软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 @xingq

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3