ASP.NET 網頁製作教本 – 從基本語法學起 第 18 章 聊天室、新聞討論群組
18-1 聊天室
範例網頁的組成
操作說明 – Step1-1 聊天室要從 Enter.aspx 進入,畫面如下:
操作說明 – Step1-2 Users 資料表的內容如下:
操作說明 – Step1-3 架框網頁 :
操作說明 – Step 2 三個網頁的用途分別是:
資料庫的寫入(1) 把發言的內容寫到 Chatroom.mdb 資料庫的 Chatroom 資料表之中,而此一資料表的結構如下:
資料庫的寫入(2) 「時間」欄位的預設值設定成 Now() 函數,當我們新增發言時,Access 會自動幫我們填入當時的系統時間,程式如下: Talk.aspx #42~49 #42 SQL = "Insert Into Chatroom (姓名, 內容) Values (?, ?)" #43 Cmd = New OleDbCommand( SQL, Conn ) #44 Cmd.Parameters.Add( New OleDbParameter("@姓名", OleDbType.Char, 50)) #45 Cmd.Parameters.Add( New OleDbParameter("@內容", OleDbType.VarChar)) #46 Cmd.Parameters("@姓名").Value = Session("Name") #47 Cmd.Parameters("@內容").Value = Word.text #48 #49 Cmd.ExecuteNonQuery()
如何重讀資料庫(1)
如何重讀資料庫(2) Reload.aspx 網頁每秒鐘會自我重新整理一次,HTML 標示如以下粗體字的部分: <HTML> <HEAD> <META HTTP-EQUIV="refresh" CONTENT="1";URL="Reload.aspx"> </HEAD> <BODY BgColor=White> 系統時間: <%=Now()%><HR> </BODY> </HTML>
如何重讀資料庫(3) View.aspx,其關鍵性的標示及程式碼如下: View.aspx #05 <Head> #06 <META HTTP-EQUIV="refresh“ CONTENT="<%=Freq%>";URL="<%=URL%>"> #07 </Head> … #37 Dim Freq As Integer #38 Dim URL As String #39 Sub Page_Load(sender As Object, e As EventArgs) #40 Freq = Session( "Freq" ) #41 If Freq = 0 Then Freq = 30 #42 URL = Request.ServerVariables("PATH_INFO") #62 End Sub
如何重讀資料庫(4) 重讀的時間間隔可以由上網者自行設定,而設定的程式在 Setup.aspx 之中: Setup.aspx #23~31 #23 Sub Set_Click(sender As Object, e As EventArgs) #24 If Val(Freq.Text) > 0 Then #25 Session("Freq") = Val(Freq.Text) #26 Else #27 Freq.Text = "30" #28 Session("Freq") = 30 #29 End If #30 Msg.Text = "重讀時間間隔已設定為 " & Freq.Text & "秒!" #31 End Sub
架框的設定 顯示 架框,其所輸出的標示如下: 顯示 架框,其所輸出的標示如下: 其中 #69的敘述把 Talk.aspx 及 Setup.aspx 橫向 分割成2:1,而 #68 又把 View.aspx 及 (Talk.aspx, Setup.aspx) 縱向分割成2:1。 t#6 Response.Write( "" & _ #67 "<HTML>" & _ #68 "<FRAMESET Rows='*, 2*'>" & _ #69 " <FRAMESET Cols='2*,*'>" & _ #70 " <FRAME Src='Talk.aspx' Name='Talk'>" & _ #71 " <FRAME Src='Setup.aspx'>" & _ #72 " </FRAMESET>" & _ #73 " <FRAME Src='View.aspx' Name='View'>" & _ #74 "</FRAMESET>" & _ #75 "</HTML>" )
18-2 新聞討論群組
範例網頁的組成(1)
範例網頁的組成 (2)
範例網頁的組成 (3)
Titles(主題總表) 資料表
Details(討論內容) 資料表
Titles 及 Details 的關係
程式設計注意事項 – Title.aspx:顯示主題總表(1)
程式設計注意事項 – Title.aspx:顯示主題總表(2) #105 Table1.Columns.Add(New DataColumn("日期", GetType(String))) #106 For I = 0 TO Table1.Rows.Count - 1 #107 Dim D1 As Date = Table1.Rows(I).Item("CreateDate") #108 Dim D2 As Date = Table1.Rows(I).Item("LastNewsDate") #109 Table1.Rows(I).Item("日期") = "" & _ #110 Format( D1, "MM/dd" ) & "-" & _ #111 Format( D2, "MM/dd" ) #112 Next
程式設計注意事項 – Title.aspx:顯示主題總表(3) 注意事項一 : 要按照 LastNewsDate(討論主題最後被討論的日期)欄位做遞減排序。
程式設計注意事項 – Title.aspx:顯示主題總表(4) 注意事項二 : 當討論主題越來越多時,所須下載的資料就會越來越多,執行速度也就越來越慢。方法: 1.限定資料錄的筆數。 2.只選取若干天以內所發起或討論過的主題。 Select Top 50 * From Titles Order By LastNewsDate Desc Select * From Titles Where LastNewsDate > DateAdd('d',-14,Now()) Order By LastNewsDate Desc
程式設計注意事項 – Detail.aspx:儲存討論內容(1) 當上網者進入某一個討論主題,並且發表意見之後,Detail.aspx 除了要將討論內容儲存於 Details 資料表之外,也會同時更新 Titles 資料表的以下兩個欄位:
程式設計注意事項 – Detail.aspx:儲存討論內容(2) 所撰寫的更新敘述如下: Detail.aspx #160~163 #160 SQL = "Update Titles Set LastNewsDate=Now(), [Number]=[Number]+1" & _ #161 " Where TitleID=" & TitleID #162 Cmd = New OleDbCommand( SQL, Conn ) #163 Cmd.ExecuteNonQuery()
程式設計注意事項 – Detail.aspx:儲存討論內容(3) 以上程式出現了兩個特殊的敘述: Update Titles Set LastNewsDate=Now(), [Number]=[Number]+1: (1) Now 是 VB 的函數,可以使用於 SQL 指令 。 (2) Number 是 SQL 的保留字,要存取名稱為 Number 的欄位,須在名稱前後加上 [ ],使之成為 [Number]。 “ Where TitleID=” & TitleID:忽略了這個條件式,則 Tiltles 資料表的所有資料錄將會全部被更新。