上一篇文章([習題]ASP.NET的 簡易投票區 & 長條圖(繪製圖表)#1 )有提到----
雖然是同一個題目(投票區),但資料表的設計不同,功能也會有差異。
上一篇文章,重點是「分享 "長條圖"」的作法。
這篇文章,則是讓初學者能體會一下「同一個題目,不同的Table帶來哪種變化?」
如果這兩篇文章都能學透了,初學者最害怕的「自己設計流程、設計Table」這一關,就有可能突破!
=========================================================================
老話重題,這些習題是送給本書讀者的課後練習,尤其是本書Ch. 14讀完(ADO.NET程式)應該會覺得很簡單。
如果您毫無基礎,讀起來可能覺得很吃力。
投票區的 [資料表]。
投票區的資料表有很多種設計方法,一開始的規劃不同,後續的程式寫法會差距很大。
沒有什麼方法是最好的,要依照實際需求與自己的能力來規劃才行。
底下的 Table是上一個範例的作法。
設計方法,是「每舉辦一次投票」當作一列記錄!
當User投票給一位候選人,就會撈出原本的票數,然後加一。 再回寫資料庫(以Update指令)
資料存放的樣子如下圖。

而這個範例的 Table設計,改用如下:
讓每一次User投票,都是一筆記錄。然後透過 Select Count()的方式去統計得票數。
這也有好處,就是每一個人的投票,都可以記錄更多資訊起來(如:投票時間、IP來源、投票者的會員編號...等等)
本文使用這種方式設計Table,您可以比較一下程式將會有哪些變化?
Table Schema的設計,是一門大學問。
設計得好,程式就很好寫。 設計偏差了,寫程式的時候就會哭出來~


Table修改之後,程式寫法也會有差異。
這一支程式,在投票區的部份,每投一票,就會 Insert Into一筆全新的紀錄到 Table裡面了。
因為HTML設計畫面完全一樣(請看上一篇文章),所以這裡只提供後置程式碼:
01 '----自己寫的---- 02 
'----自己寫的---- 03
Imports ...System
04
Imports System.Web.Configuration
05
Imports System.Data
06
Imports System.Data.SqlClient 07 '----自己寫的---- 08
09
10 
Partial
Class Vote_EasyVote_2
11
Inherits System.Web.UI.Page
12
13 
Protected Sub Button1_Click() Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
14
15
Session("vote") = RadioButtonList1.Items.Count '--共有幾個候選人
16
17
For i As Integer = 0 To (RadioButtonList1.Items.Count - 1)
18
19
If RadioButtonList1.Items(i).Selected Then
20
'************************************************
21
Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("testConnectionString").ConnectionString)
22
Conn.Open() '---- 連結DB
23
24
Dim cmd As SqlCommand = New SqlCommand("Insert into Vote_2(vote_id,vote_date,vote_to,vote_ip) values(1, getdate(),'" & RadioButtonList1.Items(i).Text & "', '" & Request.ServerVariables("LOCAL_ADDR") & "')", Conn)
25
cmd.ExecuteNonQuery()
26
cmd.Cancel()
27
28
'---- Close the connection when done with it.
29
If (Conn.State = ConnectionState.Open) Then
30
Conn.Close()
31
Conn.Dispose() '---- 一開始宣告有用到 New的,最後必須以 .Dispose()結束
32
End If
33
'************************************************
34
End If
35
Next
36
37
'--投票完成, 直接到下一個網站看結果!
38
Response.Redirect("EasyVote_2_End.aspx")
39
40
End Sub 41
End Class
投票完成後,可以直接看見「得票數」。
在HTML畫面的設計上也沒變,但為了配合資料表的改變,後置程式碼修改如下:
這些範例,日後如果有機會收集成冊(出書),
就可以講得更細緻一點。包含設計步驟,每一步都會抓圖。
程式碼也會講解多一點。
今天有點累,先到這裡為止。
本範例與完整說明,已經改寫成書本內的文章,
並集結出書,收錄在「[新書上市]ASP.NET專題實務II(下集):範例應用與4.0新功能」
...... 寄信給我 mis2000lab (at) 雅虎.com.台灣 ................................................................................................................
ASP.NET專題實務
(文魁出版,VB版 P8187 / C#版P09027)
下集已經出版囉~~~ASP.NET專題實務II:範例應用與4.0新功能 
.............................................................................................................. 寄信給我 mis2000lab (at) 雅虎.com.台灣 ........