280 likes | 477 Views
ASP.NET 網頁製作教本 – 從基本語法學起. 第 18 章 聊天室、新聞討論群組. 18-1 聊天室. 範例網頁的組成. 操作說明 – Step1-1. 聊天室要從 Enter.aspx 進入,畫面如下:. 操作說明 – Step1-2. Users 資料表的內容如下:. 操作說明 – Step1-3. 架框網頁 :. 操作說明 – Step 2. 三個網頁的用途分別是:. 資料庫的寫入(1). 把發言的內容寫到 Chatroom.mdb 資料庫的 Chatroom 資料表之中,而此一資料表的結構如下:.
E N D
ASP.NET 網頁製作教本 –從基本語法學起 第 18 章 聊天室、新聞討論群組
操作說明 – 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()
如何重讀資料庫(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>" )
程式設計注意事項 –Title.aspx:顯示主題總表(1)
程式設計注意事項 –Title.aspx:顯示主題總表(2) • Title.aspx 建立「日期」欄位的程式: Title.aspx #105~112 #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 資料表的所有資料錄將會全部被更新。