SQL Server靜態頁面匯出技術1

來源:互聯網
上載者:User
server|靜態|頁面 本段文章節選自鐵道出版社新出的《用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的電子商務網站。此外本書還對網路的安全性進行了討論,從而指導您建立一個更為健壯和安全的網路應用。閱讀本書之後,您將發現實現豐富多彩的網路應用原來這樣簡單……
絕對原創,歡迎轉載。但請務必保留以上文字。



    我們在前面對靜態頁面匯出技術進行了初步的介紹,現在我們通過一些執行個體來完成對它的詳細講解。
    靜態頁面匯出可以通過調用存貯過程和使用Enterprise Manager中的嚮導兩種方式來完成。通過嚮導的方式可以很容易地將資料庫的資料匯出為靜態頁面或建立匯出任務。使用起來十分方便,但是其的靈活性不如通過調用存貯過程的方法來得好。下面我們首先介紹如何通過嚮導建立一個靜態頁面匯出。
6.9.4.1.    使用Enterprise Manager進行靜態頁面匯出
    假設我們將建立一個靜態頁面,其內容為每日報紙上刊載的所有文章的題目及其所在版面。而此頁面的內容要求每當資料庫中的資料發生變化時都能隨之發生變化。下面我們來看看其具體的實現過程:
    在Enterprise Manager中找到要進行靜態頁面匯出的伺服器,開啟其Management容器,右擊Web Publishing對象。從彈出的捷徑功能表中選擇New Web Assistant Job選項。將啟動靜態頁面匯出的嚮導(如下圖)。

圖6.9.4.1-1靜態頁面匯出嚮導步驟1,提示資訊
    可以看到,此嚮導分為三步:定義匯出資料、調度匯出任務、格式化Web頁面。點擊下一步繼續。
    隨後將要我們選擇要匯出的資料來自哪一個資料庫,我們選擇test後,點擊下一步繼續(如下圖)。

圖6.9.4.1-2靜態頁面匯出嚮導步驟2,選擇匯出資料庫
    隨後將要求我們輸入此匯出任務的名稱(預設為test Web Page),並選擇匯出資料的方式(如下圖)。

圖6.9.4.1-3靜態頁面匯出嚮導步驟3,選擇匯出方式
其中有以下三種方式可供選擇:
■    Data from the tables an columns that Iselect:直接從表中選擇要匯出的欄位。
■    Result set(s) of a stored procedure Iselect:匯出的資料來自一個存貯過程的運行結果。
■    Data from the Transact-SQL statement Ispecify:匯出的資料來自一段SQL語句。
根據我們的應用要求,選擇第三項之後,點擊下一步繼續。
    隨後根據我們選擇的匯出方式,將要求輸入一段SQL語句(如下圖)。

圖6.9.4.1-4靜態頁面匯出嚮導步驟4,輸入匯出查詢語句
我們輸入如下的一段SQL語句:
    select id as '編號',banmian as '版面',timu as '題目'
from gaojian
where kanwu='出版報' and datepart(yy,riqi)=datepart(yy,getdate()) and
datepart(dy,riqi)=datepart(dy,getdate())
    輸入完成後,點擊下一步繼續。
    隨後將要我們對此任務的調度方式進行選擇(如下圖)。

圖6.9.4.1-5靜態頁面匯出嚮導步驟5,設定匯出任務
    其中有下面幾個選項可供選擇:
■    Only one time when Icomplete this wizard:在完成此嚮導過程時執行,並且只執行這一次。
■    On demand:在需要的時候執行。
■    Only one time at:只在指定的時刻執行一次。
■    When the SQL Server data changes:當資料庫中的資料發生改變時執行。
■    At regularly scheduled intervals:周期性的執行此任務。
對話方塊的下部有一個Generate a Web page when the wizard is completed選擇框,用來指明是否在此嚮導過程完成時執行一次頁面匯出(預設選擇此項)。
根據我們的需要,應該選擇When the SQL Server data changes一項。點擊下一步繼續。
接下來的一步根據上一步的選擇而會有所不同。我們看到的將是如下圖所示的對話方塊:

圖6.9.4.1-6靜態頁面匯出嚮導步驟6,指定跟蹤欄位
    嚮導將要求我們選擇對哪個表中的哪些欄位進行跟蹤。一旦表中的這些欄位發生了改變(在插入、刪除記錄及修改記錄時),將會運行此任務來更新靜態頁面的內容。我們選擇對gaojian表中的id、riqi、laiyuan和timu四個欄位進行跟蹤。選擇完成後,點擊下一步繼續。
    隨後將要我們選擇靜態頁面的存放位置及檔案名稱(如下圖)。我們可以將其放在IIS中某一虛擬目錄所在的目錄下。從而可以讓使用者通過網頁對其進行訪問。

圖6.9.4.1-7靜態頁面匯出嚮導步驟7,指定靜態檔案存放位置
    輸入合適的存放目錄和檔案名稱之後,點擊下一步繼續。
    隨後將要對匯出頁面的格式和編碼進行設定(如下圖)。

圖6.9.4.1-8靜態頁面匯出嚮導步驟8,指定靜態檔案的格式和編碼
    對於頁面格式,我們可以讓系統自動完成其格式的設定,也可以通過指定一個模板檔案來對其進行格式化。後面的內容將對模板檔案進行討論。這裡我們現選擇由系統自動完成頁面的格式化工作。在Use character set下拉式清單方塊中可以對頁面的字元集進行選擇,由於我們使用中文,所以應該選擇簡體中文(GB2312)。點擊下一步繼續。
    接下來將要輸入頁面標題和SQL語句執行結果表的標題並為其選擇字型的大小(如下圖)。

圖6.9.4.1-9靜態頁面匯出嚮導步驟9,指定靜態頁面標題
    對話方塊下部的Apply a time and data stamp to the Web page選擇框用來決定是否在頁面中顯示頁面產生的日期和時間,從而使使用者得知此頁面中的資料為何時產生的。設定完成後,點擊下一步繼續。
    隨後將對SQL語句執行的結果表進行設定(如下圖)。

圖6.9.4.1-10靜態頁面匯出嚮導步驟10,靜態頁面顯示效果設定
    其中Yes,display column names和No,display data only單選框用來指明結果表中是否包含欄位名(在表頭中顯示)。根據我們的需要,選擇Yes,display column names單選框,顯示欄位名。而其下的一些選項用於對錶中的一些字型效果進行設定。可以選擇等寬字型(Fixed)、比例寬度字型(Proportional)、加黑(Bold)和斜體(Italic)四種。而Draw border Lines around the HTML table選擇框用於指明是否為結果表畫出表框。設定完成後,點擊下一步繼續。
    隨後將提示是否在頁面中加入超連結(如下圖)。

圖6.9.4.1-11靜態頁面匯出嚮導步驟11,設定頁面超連結
    可以有以下三種選擇:
■    No:不在頁面中加入超連結。我們選擇此項。
■    Yes,add one hyperlink:加入一條超連結。並為其指明串連和顯示資訊。
■    yes,add a list of hyperlink URLs:加入一個超連結列表。此列表是通過一段SQL語句從資料庫的某個表中得到的。
選擇第一個選項後,點擊下一步繼續。
接下來我們可以對返回的全部記錄的數量和每頁返回的結果數量進行限制(如下圖)。

圖6.9.4.1-12靜態頁面匯出嚮導步驟12,返回結果數量限制
我們可以選擇"No,return all rows of data"單選框,不對返回的總記錄數目進行限制;也可以選擇"Yes,Return the first rows of data"單選框來對返回的記錄數目進行限制(通過在其後的文本輸入框中輸入要返回的最多記錄數)。
選擇了"No,put all data in one svrolling page"單選框則意味著所有返回的記錄都將被放在一個分頁檔之中。而如果選擇了"Yes,link the successive pages together"單選框則可以將返回的記錄放在許多分頁檔中,從而減小結果頁面的長度。方便使用者對其進行瀏覽。可以在其後的文本輸入框中輸入輸入每個分頁檔所包含最多的記錄數目。我們選擇每個頁面最多可包含20個記錄。設定完成後,點擊下一步繼續。
    隨後嚮導將提示我們已經完成了靜態頁面匯出任務的設定,並顯示它的一些相關資訊(如下圖)。

圖6.9.4.1-13靜態頁面匯出嚮導步驟13,完成確認資訊
    如果點擊Write Transact-SQL to file按鈕,則可將此任務以一個SQL語言指令檔的方式儲存下來。這樣可以在以後通過運行這個指令碼來再次建立這個任務。或者對指令碼的內容進行修改,對其實現的功能作出一些調整。根據我們的設定,其產生的SQL語句如下:
EXECUTE sp_makewebtask @outputfile = N'D:\test\cbb\ttt.htm',
@query=N'select id,banmian,timu  
from gaojian  where kanwu=''出版報'' and
datepart(yy,riqi)=datepart(yy,getdate())
and datepart(dy,riqi)=datepart(dy,getdate())
order by banmian ',
@fixedfont=1,
@colheaders=0,
@HTMLheader=3,
@webpagetitle=N'Microsoft SQL Server Web Assistant',
@resultstitle=N'Query Results',
@dbname=N'test',
@whentype=10,
@nrowsperpage=20,
@datachg=N'TABLE=gaojian COLUMN=id,timu,laiyuan,riqi',
@procname=N'test Web Page',
@codepage=936,
@charset=N'gb2312'
一旦通過嚮導完成了靜態頁面匯出任務的設定,就不能再通過Enterprise Manager對其屬性進行修改。只能使用SQL語句來修改其各項設定。我們將在後面對sp_makewebtask進行講解時再對其中各個參數的含義進行分析。
    點擊完成按鈕,結束此任務的設定工作。其產生的一個結果頁面如下圖所示。

圖6.9.4.1-14靜態頁面匯出結果
    注意:在設定了這個靜態頁面匯出任務之後,如果你在對稿件進行修改、添加或刪除的時候,將會出現一個錯誤提示。如果你關閉了IE的顯示友好的HTTP錯誤資訊功能的話(建議在調試IDC應用時關閉此功能,這樣就可以看到由系統返回的詳細錯誤資訊)就會看到下面的錯誤資訊:
    執行查詢錯誤
[State=42000][Error=229][Microsoft][ODBC SQL Server Driver][SQL Server][Microsoft] [ODBC SQL Server Driver][SQL Server]EXECUTE permission denied on object 'test Web Page', database 'test', owner 'dbo'.
[State=37000][Error=16805][Microsoft][ODBC SQL Server Driver][SQL Server]SQL Web Assistant: Could not execute the SQL statement.
    這是由於在省缺情況下,定義的靜態頁面匯出的運行權利並不是預設的賦予每個使用者。所以當以editer的身份執行IDC時,就會出現許可權沒有得到許可的錯誤資訊。不過這並不會影響對稿件資料的操作。
    解決這個問題有兩種方法,一個是修改相應的對稿件進行插入和修改的IDC檔案,將其中的Username和password分別改為sa和sa的口令。這樣就會以sa的身份運行此IDC檔案,從而就不會再出現錯誤了。而此方法會造成一些安全上的隱患,如果有人讀取了這些IDC檔案。他就知道了sa的口令,從而可以以sa的身份登入到資料庫之中。對資料庫可以進行幾乎沒有限制的操作和修改。為了避免這種情況的發生,可以通過運行下面的SQL語句來授予editers角色對靜態頁面匯出任務的執行許可權:
    grant all on test.dbo.[test Web Page] to editers
    其中test Web Page為此靜態頁面匯出任務的名字,之所以用中括弧將其擴起來的原因是它的名字中包含空格。在SQL Server中,凡是名字中包含空格的對象,在引用其名稱時都應該用中括弧將其括起來。而且對於這些對象,將不能在Enterprise Manager中對其許可權等資訊進行修改。而只能通過SQL語句來實現。這是由於Enterprise Manager中的一個bug造成的,在SQL Server的SP3中仍然沒有得到休正。
    雖然通過Enterprise Manager中的嚮導來建立靜態頁面匯出任務是一個簡單的過程,但是對於一些複雜的情況就顯得有些不太適用了。比如,假設我們將要把每天出版報的內容放到Internet上通過靜態頁面進行發布。這樣光依靠Enterprise Manager的嚮導中提供的功能就遠遠不夠了。只能通過調用sp_makewebtask存貯過程並使用一些技巧來來實現這樣比較複雜的任務。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.