SQL Server静态页面导出技术3
本段文章节选自铁道出版社新出的《用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的电子商务网站。此外本书还对网络的安全性进行了讨论,从而指导您建立一个更为健壮和安全的网络应用。阅读本书之后,您将发现实现丰富多彩的网络应用原来这样简单……绝对原创,欢迎转载。但请务必保留以上文字。静态页面导出实例分析: 下面讨论如何使用静态页面导出技术来实现我们在前面要求的各种功能。 首先,我们来看看要导出的页面文件的结构: 所有导出的页面都将被放在一个目录名为当日期的目录下。其中有两个非导出文件index.htm和show.htm文件。其作用同cbbinput目录中的default.htm和show.htm文件相类似。都是为了满足使页面能够正常显示的需要。之所以使用index.htm而不用default.htm为文件名,是因为大多数ISP提供的主页空间的目录省缺文件的名字都是index.htm。 当日的各个版面则导出为一个名为list.htm的文件。每个版面的文章题目列表则分别按顺序导出为1~n(n为当日的版面总数)个页面文件。其文件名也为1.htm~n.htm。当日所刊载的各个文章则以其id为文件名分别进行导出。在list.htm文件中,包含到各个版面页面文件的超链接。在各个版面的页面文件中,又包含到各个文章页面文件的超连接。 在出版报的主页上,还应该有一个用来显示日期的页面文件。每个日期的超链接都将与其页面文件所在的目录中的index.htm文件相对应。点击日期后,将弹出一个新的浏览器窗口。其中显示的是相应日期的报纸内容。 此外,还应当将此日各篇文章的配图文件也拷贝到此目录之下。 我们为此建立一个任务,它会在每天下午的六点执行,将当天报纸的内容导出为静态的HTML页面文件。此任务的代码如下(可以在本书配套光盘的SQLServer目录的子目录test下找到此段代码的文件,其文件名为webout.sql。它使用的模板文件也可以在此目录下找到):use testgodeclare @riqi varchar(20), @filepath varchar(255), @listfile varchar(255), @command varchar(255)set @riqi=left(convert(varchar(40),getdate(),20),10) set @filepath=''d:\webout\''+@riqi+''\''set @command=''md ''+@filepathexecute master.dbo.Xp_cmdshell @command set @command=''md ''+@filepath+''images''execute master.dbo.Xp_cmdshell @commandset @command =''copy d:\test\files\*.* d:\webout\''+@riqi+''\''execute master.dbo.Xp_cmdshell @command set @command =''copy d:\test\files\images\*.* d:\webout\''+@riqi+''\images\''execute master.dbo.Xp_cmdshell @command set @command =''copy d:\test\''+@riqi+''\*.* d:\webout\''+@riqi+''\''execute master.dbo.Xp_cmdshell @commandset @listfile=@filepath+''list.htm''execute sp_makewebtask @outputfile=@listfile,@query=''select distinct banmianfrom gaojianwhere kanwu=''''出版报'''' and datepart(yy,riqi)=datepart(yy,getdate()) and datepart(dy,riqi)=datepart(dy,getdate())'',@templatefile=''d:\test\list.tml'',@codepage=936declare @lists int,@banmian varchar(64), @filename varchar(64), @search varchar(2000)set @lists=0declare point cursor for select distinct banmianfrom gaojianwhere kanwu=''出版报'' and datepart(yy,riqi)=datepart(yy,getdate()) and datepart(dy,riqi)=datepart(dy,getdate())for read onlyopen pointfetch point into @banmianwhile (@@fetch_status=0)beginset @lists=@lists+1set @filename=@filepath+convert(varchar(64),@lists)+''.htm''set @search=''SELECT id,timu,laiyuan FROM gaojian WHERE datepart(yy,riqi)=datepart(yy,convert(datetime,''''''+@riqi+'''''')) and datepart(dy,riqi)=datepart(dy,convert(datetime,''''''+@riqi+''''''))''+''and banmian =''''''+@banmian+''''''and kanwu=''''出版报''''order by timu''execute sp_makewebtask @outputfile=@filename,@query=@search,@templatefile=''d:\test\list2.tml'',@codepage=936fetch point into @banmianendclose pointdeallocate pointdeclare @gaojianid intdeclare point2 cursor for select gaojian.idfrom gaojianwhere kanwu=''出版报'' and datepart(yy,riqi)=datepart(yy,getdate()) and datepart(dy,riqi)=datepart(dy,getdate())for read onlyopen point2fetch point2 into @gaojianidwhile (@@fetch_status=0)beginset @filename=@filepath+convert(varchar(64),@gaojianid)+''.htm''set @search=''SELECT timu,laiyuan,neirong,left(pics,10)+ STUFF(pics,1,21,''''''''),yuanwen FROM gaojian WHERE id=''+convert(varchar(64),@gaojianid)execute sp_makewebtask @outputfile=@filename,@query=@search,@templatefile=''d:\test\outfile.tml'',@codepage=936fetch point2 into @gaojianidendclose point2deallocate point2declare @dy int, @date varchar(20), @yue varchar(2), @yue2 varchar(2), @ri int, @xingqi int, @year int, @outchar varchar(1600), @tt intcreate table ##daylist (out varchar(1600))set @yue2=''00''set @tt=0declare 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 gaojianwhere kanwu = ''出版报'' order by year,dyfor read onlyopen point3fetch point3 into @dy,@date,@yue,@ri,@xingqi,@yearwhile (@@fetch_status=0)beginif @yue<>@yue2beginset @tt=0if @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>'')endif @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>'' endinsert into ##daylist values(@outchar)set @yue2=@yueset @outchar=''''fetch point3 into @dy,@date,@yue,@ri,@xingqi,@yearendclose point3deallocate point3execute sp_makewebtask @outputfile=''d:\test\daylist.htm'',@query=''select * from ##daylist'',@templatefile=''d:\test\rili.tml'',@codepage=936drop table ##daylist 首先请读者通读上面的代码,以便对它有一个大概的了解。下面我们将对代码进行逐段的分析和讲解:- 联系我们: QQ:82526114(技术) 411523648(客服) 237057746(财务)
- 电话:+86-762-4372098 邮箱:webmaster@814e.net,support@814e.net
- 粤ICP备05002242号 网监局备案:4403701910502
