Web的公文發布系統
發表于:2007-05-25來源:作者:點擊數:
標簽:
b>摘 要 文章介紹了基于Web的Browser/Server數據庫模式公文發布系統的設計與實現技術,特別是對ASP方式下對數據庫的操作進行了比較詳細的說明。 關鍵詞 Browser/Server 數據庫 ASP ADO 1. 前言 隨著Internet應用的不斷擴展,許多單位內部都建有Intranet。加
b>摘 要
文章介紹了基于Web的Browser/Server數據庫模式公文發布系統的設計與實現技術,特別是對ASP方式下對數據庫的操作進行了比較詳細的說明。
關鍵詞 Browser/Server 數據庫 ASP ADO
1. 前言
隨著Internet應用的不斷擴展,許多單位內部都建有Intranet。加快單位內部信息的傳送,通過Intranet及時發布、獲取單位內部的信息,對于改善和優化單位管理、提高辦事效率、提高經濟效益會提供有力的支持。為此,我設計和
開發了一個適用于單位內部的公文發布系統。這個系統是運行于WinNT平臺的基于Browser/Server數據庫模式的。這種模式由于其界面簡單,適用于不同地點遠程訪問等特點,近來倍受青睞。一般B/S數據庫模式的開發有ASP,API和CGI方式,這里采用ASP方式。
2. 系統的功能
本公文發布系統主要完成三大功能:
1) 用戶管理
本系統中的用戶分為兩類:超級用戶、一般用戶。其中每位一般用戶在做與發布信息相關的操作時是發布人,在做與接收信息相關的操作時是接收人。系統中的超級用戶可以隨時添加、刪除一般用戶。一般用戶可以隨時修改用戶個人的信息。
2) 發布人業務
任何一般用戶在選擇了一個或多個接收人后,都可以同時向他們發送同一件公文,發布人還可以查看甚至在必要時刪除曾經發布過的公文。
3) 接收人業務
每一位接收人都可以及時看到發送給自己的公文,并可以在看完后刪除該公文。如果一件公文是同時發送給多個用戶的,其中一位接收人刪除公文后,并不影響其他接收人查看此件公文。
3. 系統的設計
B/S 數據庫模式采用三層結構:瀏覽器——Web
服務器——數據庫服務器,客戶端除了瀏覽器組件外無需其它組件,所有的程序,數據庫及其它組件都集中在服務器端,這樣,所有的軟件維護及數據庫的備份都只需在服務器端進行。實質上,客戶機與Web服務器之間類似于一種終端與主機的模式,而Web服務器與數據庫服務器之間是一種Client/Server數據庫模式。本系統使用IIS4.0作為Web服務器,使用MS
SQL Server作為數據服務器。具體設計如圖示:
本系統在MS SQL Server中創建了一個數據庫,庫中包含兩個表:用戶信息表和公文信息表。用戶信息表包括用戶名、口令、用戶? 開身份、E-mail、電話等字段,其中用戶名為關鍵字。公文信息表包括公文主題、內容、發布時間、發布人、發布人的IP以及以每個用戶名作為字段名的一系列字段,其中以公文的主題和發布人作為關鍵字。
因為系統中每個用戶都是通過瀏覽器使用系統的,為了系統的
安全性和用戶使用方便,我在用戶信息表中使用了用戶的公開身份字段,它的內容與用戶名字段的內容是一一對應的。這樣,每位用戶在登陸系統時,是通過在瀏覽器中輸入自己的用戶名和口令來進入的,而發布人在選擇接收人時,是通過查看用戶的公開身份來選擇用戶,系統處理時則又是使用與用戶的公開身份相對應的用戶名來處理的。
因為系統中用戶的數量是動態變化的,可以隨時增加和減少,而每一件公文又都可能是發送給不同用戶的,并且其中一位用戶刪除公文后還不能影響其他用戶對該公文的操作。為了實現以上功能同時減少數據冗余,我使用了動態改變庫結構的方法。具體如下:
1) 當超級用戶增加、刪除用戶時,系統既相應地增加、刪除用戶信息表中的記錄,又同時在公文信息表中增加、刪除以用戶名為字段名的字段(這些字段為Char型,可以為Null)。
2) 當發布人選擇好接收人并發布公文時,首先查詢用戶信息表,將接收人的公開身份轉化為用戶名,然后在公文信息表中相應增加一條記錄,記錄下公文的主題、內容、發布時間、發布人、發布人的IP,同時將該條記錄中以接收人用戶名為字段的字段值置為“1”。
當發布人要查看、刪除已發布的公文時,通過關鍵字來查看、刪除相應的記錄。
3) 當接收人要查看新公文時,系統將查詢公文信息表中以接收人用戶名為字段名的字段值為“1”的記錄,按發布時間的倒序在接收人的瀏覽器中列出這些記錄的公文主題字段的內容,這每一條主題是一個超級鏈接,接收人點擊后即可瀏覽公文的內容。
當接收人欲刪除瀏覽完的公文時,點擊刪除按鈕,系統就將公文信息表中該條公文記錄的以接收人用戶名為字段名的字段值設置為“0”。這樣處理就不會影響其他接收人接收該條公文了。而且每一條公文無論發送給幾個接收人都只保存一條記錄,大大節省了存儲空間,提高了系統的效率。
4. 系統實現的關鍵技術
1) 在ASP中事務的處理以及增加、刪除數據表中字段的實現。
如上所述,增加用戶時需要對兩個數據表(用戶信息表、公文信息表)進行操作,如果有時系統剛剛在用戶信息表中增加了一條記錄,然而就在這一時刻,Web服務器的硬盤驅動器突然壞了,這時還沒來得及在公文信息表中增加字段。這就會使事情變得很糟糕。在ASP中,我們可以使用Begin transaction和Commit transaction來定義事務塊.在該塊中顯示的語句只有在執行Commit transaction后才發生效用。假如在到達該語句之前的任一點發生了錯誤,所有在該事務中的語句都不會發生效用。比如在下面的代碼中,如果Web服務器的硬盤在執行完INSERT語句而在它的下一句之前發生了硬盤錯誤。沒有數據會插入到用戶信息表中。系統會倒轉回執行Begin transaction之前的狀態。
本系統主要使用ADO技術實現與數據庫的連接。ADO的強大功能得益于Transact_SQL。在SQL Server中增加、刪除一個數據表字段的Transact_SQL語法如下:
增加字段:alter table $#@60;數據表名稱$#@62; add $#@60;字段名稱 數據類型 Null/Not Null$#@62;
刪除字段:alter table $#@60;數據表名稱$#@62; drop column $#@60;數據表字段名稱$#@62;[,…n]
在ASP中,我們可以通過ADO技術,借助Transact_SQL的功能,完成對數據庫的各種操作。
本系統中使用ASP語言實現的增加用戶部分的核心代碼如下:
利用ADO訪問數據庫
set sn=server.createobject("adodb.connection")
sn.open "dsn=
sql7; uid=rdy; pwd=ydr"
進行事務處理
begin transaction
在用戶信息表中插入一條記錄
sql="insert into yhxx(xm,kl,gksf,email,tel) values("&request.form("zhcyhm")&","&request.form("zh
cmm")&","&request.form("zhshxm")&","&request.form("zhcem")&","&request.form("zhcdh")&")"
set rrs=sn.execute(sql)
在公文信息表中增加以用戶名為字段名的字段
sql="alter table xxfbqx add " &request.form("zhcyhm")& " char(1) null"
set rrs=sn.execute(sql)
事務處理結束
commit transaction
2) 用ASP在下拉列表框中實現多項選擇
系統要求發布人可以一次給多個接收人發送公文,于是,我在Html頁面中插入了一個下拉列表框,框中列出的是備選的接收人。用戶可以按住Ctrl鍵,并用鼠標選擇多個接收人,然后點擊“選定”按鈕,完成接收人的選擇。使用ASP語言具體實現的核心部分的代碼如下:
$#@60;%sql="select * from yhxx"
set rrs=con.execute(sql)
已選擇的接收人的人數
Dim intNumberSelected
由所有的選項連接而成的字符串,每兩個選項之間以逗號分隔
Dim strSelectedTeams
由每一個選項作為一個元素形成的數組
Dim arrSelectedTeams
Dim I 循環變量
intNumberSelected = Request.QueryString("teams").Count
返回選項的個數
If intNumberSelected = 0 Then%$#@62;
$#@60;div align="center"$#@62;$#@60;center$#@62;$#@60;p$#@62;$#@60;select NAME="teams"
MULTIPLESIZE="9"$#@62;
$#@60;%do while not rrs.eof 如果存放用戶信息的表不為空%$#@62;
$#@60;option$#@62;$#@60;%response.write rrs("gksf") 將表中的用戶公開身份字段的每條記錄作為下拉列表框的一個選項顯示出來%$#@62;$#@60;/option$#@62;
$#@60;%rrs.movenext
loop%$#@62; $#@60;/select$#@62; $#@60;br$#@62;
$#@60;input type="submit" value="選定"$#@62;
$#@60;input type="reset" value="重選" $#@62;$#@60;/p$#@62;
$#@60;/center$#@62;$#@60;/div$#@62;
$#@60;/form$#@62;
$#@60;%
Else
strSelectedTeams = Request.QueryString("teams")
arrSelectedTeams = Split(strSelectedTeams, ", ", -1, 1)%$#@62;
$#@60;p$#@62;您一共選擇了$#@60;b$#@62;$#@60;%= intNumberSelected %$#@62;$#@60;/b$#@62;個接收人:$#@60;/p$#@62;
$#@60;p$#@62;$#@60;b$#@62;$#@60;%= strSelectedTeams 將所選項輸出,每兩項之間以逗號分隔%$#@62;$#@60;/b$#@62;$#@60;/p$#@62;
3) 怎樣用ASP判斷數據庫中符合條件的記錄是否存在
當使用recordset(記錄集)對記錄進行條件查詢時,我們可以使用recordcount屬性來統計有多少條符合條件的記錄。而當我們使用connection(面向連接的對象)時,我們應怎么辦呢?這種情況下的一個強有力的武器就是count()函數,這個函數的使用方法如下:
l 統計一個表中某一字段不為Null值的記錄有多少條
例如:SELECT COUNT(name) FROM authors
這個例子計算表authors中名字字段中(name)不為Null值的記錄的數目。如果相同的名字出現了不止一次,該名字將會被計算多次。
l 條件查詢
例如:SELECT COUNT(name) FROM authors WHERE name=’Rdy’
這個例子返回名字為“Rdy”的記錄的數目。如果這個名字在表authors中出現了兩次,則此函數的返回值是2。
l 統計某一字段值互不相同的記錄有幾條
假如你想知道有不同名字的作者的數目。你可以通過使用關鍵字DISTINCT來得到該數目。例如:SELECT COUNT(DISTINCT name) FROM authors
如果名字“Rdy”出現了不止一次,它將只被計算一次。關鍵字DISTINCT 決定了只有互不相同的值才被計算。
須注意的是:當你使用COUNT(字段名)時,字段中的空值將被忽略。而使用count()時,沒有指定任何字段,這個語句講計算表中所有記錄的數目,包括有空值的記錄。
在本系統中我使用了第二種方法,代碼如下:
$#@60;%sql="select count(xm) from yhxx where xm="& request("yhm")&""
con為一個connection對象
rs=con.execute(sql)
在用戶信息表中查詢姓名字段值等于用戶輸入的字符串的記錄
if rs(0)=0 then%$#@62;
不存在這樣的記錄
$#@60;p$#@62;$#@60;tt$#@62;您輸入的用戶名不正確!$#@60;/tt$#@62;$#@60;/p$#@62;
$#@60;%else
存在這樣的記錄
……
end if%$#@62;
5. 結束語
B/S數據庫模式由于其簡單,使用維護方便將會成為數據庫發展的必然趨勢。運用ASP可完成單位內部網中的許多功能,如電子郵箱管理,BBS等。ASP結合ADO技術確實功能十分強大,速度快,效率高,占用內存少。但是,本系統要達到比較完美的階段,尚需不斷完善。
原文轉自:http://www.kjueaiud.com
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|