簡介:
         網路資料庫常用於類似旅館訂房預約的管理,這種系統通常會有靜態的資料,如房間表;也有動態的資料,就是訂房紀錄了!靜態資料的處理只有取出資料就是Select的動作,動態資料則必須有新增、刪除與更新等動作,這種資料架構與處理流程在各種商業交易上是很常見的,有必要好好學習。

建立資料庫
首先建立一張『房間表』欄位設定如下:

在實務上房間資訊可以有很多,譬如床位數、價格、或設備等等,但是本範例僅做訂房動作,其實只會用到房號。
請輸入幾筆資料如下:

上面的是靜態資料,程式執行中都不會變動,接著要設計一個『訂房表』,也就是交易紀錄,欄位定義如下:

比較特別的是此處日期房號前面都有代表主索引鍵的鑰匙符號,這叫做複合鍵,意思是資料的日期可以相同,房號也可以相同,但是日期與房號不能同時都一樣,如果一樣就是一房兩租了!這樣設定之後就可以保證交易一定不會重複(資料庫不會接受)。設定方式是用Shift加滑鼠點選,同時選這兩欄之後設定主索引鍵。
資料型別日期部分應該用彈性長度,其他用預設值即可。
或許有人會問日期為何不用時間的資料型態?確實有datatime資料型別,但是VB與資料庫之間對這種型別的辨識方式不太一致,為免麻煩以老師的經驗都用字串(字元陣列)就可以了。這個表是稍後執行程式時動態使用的,不需要先輸入資料!

網頁介面設計
首先請將本範例需要的所有物件先一次擺出來,最上方是一個Calendar月曆物件,接著是一個RadioButtonList,然後是一個表格置入三個TextBox,分別用於顯示(或輸入)訂購人、電話與要求。接著是兩個按鍵,一個用於新增或修改訂房資料,另一個是刪除;最後還有一個GridView暫時空著,是用來將資料帶進網頁處理用的。

RadioButtonList是要顯示房號的,請按照之前所學,連接到資料庫的『房間表』的『房號』欄位即可,AutoPostBack需開啟。執行畫面如下:


輸入第一筆資料
因為資料庫是全空的,我們先來寫程式輸入第一筆資料,程式碼包括 Calendar1 被點選時與按下Button1的時候:

日期被點選時我們用Session("Date")工作階段變數記住它,SelectedDate包括時分秒,像這樣:"2012/8/10 上午 12:00:00 "
所以用年月日與時分秒之間的一個空白將資料切開,D(0)就是日期了(D(1)是時間)。接著是新增資料的按鈕,其實就是借用 SqlDataSource物件已經連好資料庫的方便,直接製作Insert指令然後執行就可以了!
新增之後我們可以回到Visual Studio軟體看看資料是不是進來了,顯示訂房表的內容應該變成下圖這樣,如果沒有出現新資料請按上面的紅色驚嘆號相當重新整理應該就會出現了!


讀出舊資料
資料庫中有資料之後我們應該要能讀取舊資料,之後還要能更新甚至刪除舊資料。首先需要的是當使用者選到某日某房時要能將該筆資料讀進網頁,這就是前面設計時放置的GridView1要做的事情了!請開始替它連結資料庫,資料表及欄位選擇如下,再按WHERE設定條件:

第一個條件是日期必須等於Session("Date")

第二個條件是房號等於RadioButtonList選擇的Value:

這是GridView1應有的資料連結條件,此時試試看點選之前輸入的日期與房號,應該資料會自動出現在GridView1,但是我們要的不只是這樣,而是要讓資料填到 TextBox之中,讓使用者有機會繼續修改,所以要在GridView1_DataBound(載入後)寫程式如下:

上面程式除了將資料顯示於TextBox(如無資料會空白)之外,還有一個小動作是如果有舊資料,就將 Button1的文字變成『確定修改』,讓使用者知道現在是新增還是修改。

更新資料的程式
更新資料的程式可以與新增一起寫在Button1,邏輯很簡單,先嘗試新增編輯中的資料,如果是已經存在的日期與房間就會出錯(主索引鍵重複),出錯時就試試看用Update指令去修改舊資料就好了。程式碼修改如下:


刪除資料的程式
應該寫在Button2,程式碼如下:

這裡因為主索引鍵有兩個,所以條件式(Where)也要寫兩個(日期與房號),中間用"And"串起來,接著就是執行Delete,要立即看到結果應該也要重新連結 GridView的資料,因為GridView_DataBound時也會更新TextBox,所以你會看到刪除資料時TextBox的內容也會立即消失。專案完成,可以做各種的資料處理測試了!

要求一定要選日期與房間
上述程式還有一個小漏洞,使用者可能會忘了先選日期與房間就確定訂房了!為了確定資料齊全,可以在 Button1的程式最前面加上條件式如下:

RadioButtonList這種物件未選擇項目時,SelectedIndex 的值會等於 -1!