投影片 1 - RFID-建國科技大學資管系RFID應用

Download Report

Transcript 投影片 1 - RFID-建國科技大學資管系RFID應用

第五章、VB.NET 2008資料庫程式設計
RFID系統的後端需要有一個強大的資訊系統來接收
與處理資料,而這絕大多數都與資料庫與有關,因
此,本章主要教導讀者如何使用MS VS.NET 2008平
台內的VB.NET 2008語言進行資料庫系統開發,以
MS ACCESS、MS SQL Server與MySQL等為資料庫
進行說明,讓讀者具備撰寫連結資料庫的RFID資訊
系統之能力;同時,本章最後則是針對程式的封裝
方式做介紹,讓開發完成後的程式可以順利封裝交
付給使用者使用。本章內的所有範例程式,讀者都
可以在本書光碟內的CH5目錄內找到並應用。
1/203
大 綱











5-1 VS.NET 2008開發平台介紹
5-2 VS.NET 2008資料庫系統開發
5-3 SQL指令
5-4 不寫程式連結資料庫
5-5 DataReader 物件讀取資料
5-6 DataReader 物件異動資料
5-7 DataSet
5-8 MS SQL Server資料庫之連結
5-9 MySQL資料庫之連結
5-10 程式封裝與部署
5-11 POS銷售系統
2/203
VS.NET 2008資料庫系統開發
3/203
資料庫系統開發
 VS.NET 2008具有一平台、多語系與同一種
語言可開發多種平台(Windows Form/ PDA
Form/ Web Form)程式的特性
 這是一個整合性的工作,雖然繁雜,但是也
深具挑戰性
 現今隨著開發平台的進步,程式設計師幾乎
只要著重在資料庫規劃、邏輯流程與商業流
程上就可以,剩下的都由平台提供的元件或
物件來處理,MS VS.NET 2008就是其中一
4/203
種
資料庫系統開發
 本章並不從基礎的資料庫系統管理、系統分
析與設計談起(有興趣的讀者請見本書第三
與第四章之說明)
 是以實際操作VS.NET 2008開發平台的角度,
直接帶領讀者進行資料庫程式設計開發之工
作
5/203
VS.NET 2008開發平台介紹
6/203
VS.NET 2008介紹
 VS.NET 2008是微軟公司最新的資訊系統開
發平台,屬於全物件化導向開發平台
 集合VB.NET、C#與C++.NET三種語法於一
身,且可以開發Windows Form、Web Form
與PDA行動裝置等三種不同類型的程式
 以往使用VB或C++語法開發系統的使用者
可以再不需要重新學習語法的情形下轉移到
VS.NET 2008平台上面,擁有更便利的介面
設計功能與物件支援,並利用同一語言、同
7/203
一平台與同一架構開發三種類型
VS.NET 2008介紹
 完成安裝VS.NET 2008開發平台後,可以從
「開始」「程式集」「Microsoft Visual
Studio 2008」「Microsoft Visual Studio
2008」啟動主開發平台,如圖5-1所示
 啟動後的開發平台畫面如圖5-2所示,等待
使用者做新專案的「建立」或是「開啟」舊
專案
8/203
圖5-1、VS.NET 2008平台啟動位置畫面
9/203
圖5-2、VS.NET 2008開發平台起始畫面
10/203
VS.NET 2008介紹
 這裡以「建立」新專案的方式做說明,請在
圖5-2上的「最近使用的檔案」區塊選擇
「建立」「專案」,將出現圖5-3的新專
案設定畫面。
 這裡需要設定使用的語言、開發程式類型與
給定專案名稱,本書的開發程式選用的是
Visual Basic語法,此例的程式類型以
Windows Form程式為例,並給定專案名稱
為「CH5-1」,最後按下「確定」完成專案
11/203
起始設定
圖5-3、VS.NET 2008新專案設定畫面
12/203
VS.NET 2008介紹
 等待一段時間後將出現如圖5-4的專案建立
後起始畫面,預設有一個叫做Form1的表單
(Form),表單是給開發人員設計使用者
介面之用
 所有在視窗程式中需要的介面物件都會在畫
面最左方的「工具箱」內,而預設「工具箱」
是呈現內縮狀態。您可以將滑鼠移動到「工
具箱」上方,此時「工具箱」將會自動展開,
如圖5-5所示。
13/203
圖5-4、VS.NET 2008新專案建立後啟始畫面
14/203
圖5-5、工具箱展開畫面
15/203
VS.NET 2008介紹
 請記得到此為止,整個專案是呈現未存檔的
狀況,此時可以點選圖5-6上面的「存檔按
鈕」進行存檔,請利用「瀏覽」選擇儲存
「位置」,本範例將其儲存至系統桌面,確
定後按下「儲存」按鈕,最後可以在桌面上
看到剛剛儲存的專案目錄CH5-1,如圖5-7所
示
16/203
圖5-6、儲存專案畫面
17/203
圖5-7、桌面CH5-1專案目錄畫面
18/203
VS.NET 2008介紹
 您可以點選進入CH5-1的目錄裡面瀏覽整個
檔案結構,會看到如圖5-8的畫面,CH51.sln就是整個開發專案的起始進入點,也就
是下次您要再開起這個專案時,可以選擇在
這個檔案上用滑鼠左鍵快按兩下,就可以再
度將專案打開,繼續後面的開發作業
19/203
圖5-8、專案CH5-1目錄內容
20/203
VS.NET 2008介紹
 除了CH5-1.sln之外,可以看到還有一個CH5-1的
目錄,裡面儲存的就是專案的所有介面與程式相
關設定與檔案,進入CH5-1目錄後的畫面如圖5-9
所示。
 目前專案只有一個表單Form1,所以可以看到有
Form1.Designer.vb、Form1.vb與Form1.resx等三個
相關檔案;.NET平台內是採取「畫面」與「程式」
分離的設計方式,因此儲存時也是各自有不同的
檔案,Form1.Designer.vb就是畫面設定檔,而
Form1.vb則是程式檔案
21/203
VS.NET 2008介紹
 CH5-1目錄內有另外一個子目錄bin需要介紹,
這個目錄關係到未來專案的發布,同時在開
發過程中.NET也會將每次執行結果產生的
執行檔與中間檔存放於此,此部分我們將在
稍後做介紹
22/203
圖5-9、專案CH5-1程式目錄內容
23/203
VS.NET 2008介紹
 讓我們再回到開發平台畫面,在畫面右方有
兩個小視窗,分別是「方案總管」與「屬性」
視窗,「方案總管」內掌管了專案內的所有
檔案,因此與實際檔案結構是一對一的狀態,
但是預設是不出現所有檔案。如圖5-10選擇
「顯示所有檔案」按鈕,就可以看到圖5-9
內的所有目錄與檔案
24/203
顯示所有檔案
圖5-10、專案CH5-1方案總管畫面
25/203
VS.NET 2008介紹
 另一個「屬性」視窗可以讓您設定物件(包
含表單)的外觀樣式等資料,例如圖5-11我
們將Form1上的標題顯示文字改成「我是表
單一」,可以透過屬性視窗內的「Text」屬
性來完成,直接輸入,馬上就可以看到變化
26/203
圖5-11、專案CH5-1屬性視窗畫面
27/203
VS.NET 2008介紹
 讓我們再談回剛剛的bin目錄,進入bin目錄後可以
發現有兩個預設的目錄,分別是「Debug」與
「Release」,如圖5-12所示。
 在專案還在「開發階段」,開發過程的中間檔案,
包含可執行檔與中介檔等都會被放置到Debug目錄
中,隨時會有更新的動作,因此取名為「Debug」;
但是等專案整個開發告一個段落後,要正式將專
案封裝「發佈」給客戶時,就需要將建置後的可
執行檔與中介檔切換放到Release目錄中,以免發
生錯給檔案等事情,所以取名為「Release」
28/203
圖5-12、專案CH5-1內bin目錄畫面
29/203
VS.NET 2008介紹
 下面讓我們來練習上述的「開發」與「發佈」
動作,首先請再進入到Debug目錄中,可以
發現欲設只有一個檔案,如圖5-13所示
30/203
圖5-13、專案CH5-1內bin\Debug目錄畫面
31/203
VS.NET 2008介紹
 此時再回到VS.NET 2008開發平台,選擇
「開始偵錯」按鈕,如圖5-14所示,就可以
看到目前專案開發的實際執行畫面,如圖515
32/203
圖5-14、執行專案CH5-1
33/203
圖5-15、專案CH5-1執行畫面
34/203
VS.NET 2008介紹
 接著,再回到bin\Debug目錄中,您可以發
現多出了三個檔案,其中有一個就是可執行
檔CH5-1.exe,如圖5-16,未來要發佈給客
戶的也就是這些檔案,本章最後一節會敎大
家怎麼製作可安裝光碟
35/203
圖5-16、專案CH5-1執行後bin\Debug目錄畫面
36/203
VS.NET 2008介紹
 相反地,如果您切換到bin\Release目錄,您
可以發現裡面空空如也,如圖5-17,當然這
是合理的,因為尚未確認目前的專案就是最
後可以進行發佈的專案
37/203
VS.NET 2008介紹
 如果已經確認目前專案的狀態是可以進行發
佈的最後狀態,那我們就需要把可執行檔等
檔案產生到Release目錄,以後所有安裝光
碟製作的來源就來自於這個目錄,才不至於
發生錯抓檔案的情事。您可以選擇「專案」
「CH5-1屬性」,來進行這樣的切換作業,
如圖5-17所示
38/203
圖5-17、專案CH5-1 bin\Release目錄畫面
39/203
VS.NET 2008介紹
 接著可以看到圖5-18的專案屬性設定畫面,
請選擇「編譯」,可以看到「建置輸出路徑」
的設定,請確認路徑是bin\Release。這時候
就可以開始建置產生最後版本的可執行檔案
 如圖5-19,請選擇「建置」「建置CH51」。順帶一提,您可以在圖5-18的畫面內
選擇「應用程式」,可以看到「啟動表單」
的設定,從此決定哪個表單是系統執行時要
看到的第一個畫面,類似網路的首頁
40/203
圖5-18、專案CH5-1 bin\Release目錄切換畫面
41/203
圖5-19、專案屬性設定畫面
42/203
VS.NET 2008介紹
 等待一段建置時間後,建置完成後,我們可
以再進入bin\Release目錄內,會發現產生了
跟bin\Debug內相同的檔案,如圖5-20,但可
以確認的是這裡的檔案是可以當成最後被發
佈使用的
43/203
圖5-20、專案建置畫面
44/203
VS.NET 2008介紹
 接下來我們可以開始進行個簡單的介面設計
與程式撰寫,如圖5-21所示,從「工具箱」
內選用「Button」物件,並從屬性視窗將其
顯示文字(Text屬性)改成「請按我」,如
圖5-21。
 再來可以在這個按鈕上,使用者會有的動作
或是事件內撰寫程式碼,進入程式碼編輯畫
面的方式是在按鈕上用滑鼠左鍵快按兩下就
可以,如圖5-22
45/203
圖5-21、專案CH5-1建置後bin\Release目錄畫面
46/203
VS.NET 2008介紹
 如圖5-22,Button1_Click中的Button1是物件
名稱,Click是事件,代表使用者進行點按
這個按鈕的動作,物件不同的事件可以在圖
5-22的事件切換選項中進行切換。在此寫個
簡單的指令,當使用者按下按鈕後,跳出一
個訊息框,歡迎使用者,指令如下(圖5-23)
MessageBox.Show("歡迎光臨!")
47/203
圖5-22、在專案CH5-1中建立並使用Button物件畫面
48/203
事件切換選項
圖5-23、專案CH5-1程式碼編輯畫面I
49/203
VS.NET 2008介紹
 最後可以來執行看看結果是否符合規畫與預
想的結果,如果你看到圖5-24,那就恭喜妳,
大功告成
50/203
圖5-24、專案CH5-1程式碼編輯畫面II
51/203
VS.NET 2008介紹
 最後可以來執行看看結果是否符合規畫與預
想的結果,如果你看到圖5-25,那就恭喜妳,
大功告成
52/203
圖5-25、專案CH5-1執行畫面II
53/203
VS.NET 2008資料庫系統開發
54/203
VS.NET 2008資料庫系統開發
 在VS.NET 2008的平台中用來連結資料庫的
元件或物件因為不同資料庫的架構設計可以
區分成(1)OLEDB、(2)MS SQL Server、
(3)Oracle與(4)ODBC等四大塊
 其中(2)與(3)是特別針對MS SQL
Server與Oracle兩種資料庫系統所量身訂做
的
55/203
VS.NET 2008資料庫系統開發
 如圖5-26所示,資料庫系統的最外層是資料
庫管理系統(Database Management System,
DBMS),再來則是資料庫(Database),
下去就是資料表(Table),最後是欄位
(Field),資料就存在資料表的欄位中,也
因為這樣當讀者要存取到資料表內的資料時
一定要先通過DBMS與Database,最後才能
透過SQL指令去操作資料表
56/203
資料庫管理系統(DBMS)
Connection物件
資料庫1
資料表
Command物件
欄位
資料庫2
DataAdapter物件
DataSet物件
DataReader物件
資料表
欄位
顯示資料
圖5-26、資料庫與.NET平台資料庫物件對應圖
57/203
VS.NET 2008資料庫系統開發
 圖5-27則說明了使用VS.NET 2008平台開發
資料庫的物件架構圖,讀者只要把握此架構
圖就可以順利開發出資料庫系統。此架構圖
是搭配資料庫系統的架構而設計
58/203
VS.NET 2008資料庫系統開發
 在VS.NET 2008 中,負責通過DBMS 與Database
這兩個管理員是由「Connection」物件來負責(圖
5-26),所以「Connection」物件身上一定需要攜
帶有帳號與密碼等資訊,我們將其稱為連線字串
(Connection String),網路上有專門針對不同資
料庫的連線字串整理的網站, 讀者可以參考
http://www.connectionstrings.com/
59/203
VS.NET 2008資料庫系統開發
 接著就可以看到資料表,此時需要透過SQL指令
去操作資料表,這項工作就由「Command」物件
負責,SQL 指令(請見5-3 節)執行完畢後會產生
一個虛擬的資料表結果,「虛擬」表示這個資料
結果也是一個有資料集合的資料表,只是並不實
際存在於資料庫中,而是在記憶體或是物件中,
也就是圖5-27 中的「DataReader」物件或是
「DataSet」物件,最後才從這些物件取用,顯示
或操作資料。
60/203
DBMS/DB
CommandBuilder
物件
Connection物件
Command物件
DataAdapter
物件
DataSet物件
DataReader物件
ExecteNonQuery
可異動資料
DataReader物件
ExecuteReader
唯讀
On-line線上作業模式
Off-line離線作業模式
圖5-27、.NET平台開發資料庫系統物件架構圖
61/203
VS.NET 2008資料庫系統開發
 了解物件的功能後要再繼續談圖5-27,VS.NET
2008 中為了節省資料處理時間與資料庫系統負擔,
設計兩種連線方式,分別是「即時連線(online)」與「非即時連線(off-line)或是離線存取」
兩種方式,後者是將資料集暫放於記憶體內,程
式直接對記憶體作讀寫。兩種方式使用的物件與
完成路徑不完全相同(圖5-27
62/203
VS.NET 2008資料庫系統開發
 但不管是哪一條路,不可避免的是都需要有
Connection 與Command 物件,離線作業因為最後
還是要將資料更新回資料庫,否則所有的異動作
業都只是針對記憶體, 所以另外有一個負責更新
的物件, 稱為「CommandBuilder」物件,表5-1
整理了上述物件的名稱與各自的功能。
63/203
表5-1、VS.NET 2008資料庫物件功能說明
物件名稱
主要功能
編號
1
Connection
負責連結資料庫系統與資料來源
需要連線字串
(http://www.connectionstrings.com/)
2
Command
負責執行SQL指令
DataReader
1.負責擷取Comand物件執行完SQL指令後
的結果(資料)
2.分成唯讀與可異動資料兩種模式
3.採即時連線(on-line)方式作業
4
DataAdapter
1.負責擷取Comand執行完SQL指令後的結
果
2.採離線(off-line)方式作業
5
DataSet
離線(off-line)作業下資料儲存物件,所
有異動作業都是針對此物件
6
CommandBuilder
負責離線(off-line)作業最後的資料更新
回資料庫
3
64/203
VS.NET 2008資料庫系統開發
 VS.NET 2008 中有許多分類好的類別,等待
讀者去使用並建立物件,這些類別分類在
VS.NET 2008 中稱為名稱空間
(namespace)。因為類別與物件是主從關
係,類別是藍圖,物件是藍圖的實作,所以
使用這些物件前都需要引用正確的類別或是
名稱空間,引用的指令是Imports,表5-2 整
理出四大類資料庫物件的名稱空間,這是很
重要的一個步驟,如果忘了這個步驟則永遠
無法建立出表5-1 中的物件。
65/203
VS.NET 2008資料庫系統開發
 以SQL Server 類別為例,需要撰寫的引用指
令為:
Imports System.Data.SqlClient
 指令碼撰寫的位置是在Public Class …End
Class 最外面,如圖5-28 所示
66/203
圖5-28、VB.NET引用名稱空間畫面
67/203
表5-2、VS.NET 2008中資料庫物件的名稱空間列表
編號
物件類別
名稱空間
適用資料庫
1
OLEDB
System.Data.OleDb
MS ACCESS …
2
SQL Server
System.Data.SqlClient
MS SQL Server
3
Oracle
System.Data.OracleClient
Oracle
4
ODBC
System.Data.Odbc
MySQL等大部分資料庫
68/203
VS.NET 2008資料庫系統開發
 綜合上面所述,整個VS.NET 2008 資料庫程式開
發可以分成下面五大步驟,分別是:
– Imports 物件類別(表5-2)
– 建立Connection 物件開啟資料庫連線
– 建立Command 物件透過sql 指令進行資料庫操
作 (讀取/寫入)
– 建立DataReader 或DataAdapter 等物件擷取SQL
指令執行的結果
– 關閉資料庫連線
 上面步驟是不可以顛倒順序的,如圖5-29 所示 69/203
開始
Imports NameSpace
建立Connection物件
建立Command物件
建立DataAdapter物件
建立DataReader物件
建立DataSet物件
DataGridView或其
他資料顯示物件
圖5-29、VS.NET 2008連結資料庫步驟
70/203
VS.NET 2008資料庫系統開發
 而Command 物件使用的SQL 指令主要有四
項,負責資料庫的新增、刪除、修改與查詢
等四大功能,也是任何程式可以驅動資料庫
工作的命令源,表5-3整理說明此四項SQL
指令的簡單用法
 請讀者謹記一個原則,就是「欄位型態」如
果是字串或是日期等型態,則需要將對應的
「資料」加上單引號,更詳細的SQL 指令
或是變化,請讀者自行參考其他書籍說明
71/203
表5-3、SQL指令說明
編號
功能
指令
1
新增 insert into 資料表名稱 (欄位名稱) values (資料)
2
刪除 delete from 資料表名稱 where 條件
3
修改 update 資料表名稱 set 欄位名稱=新值 where 條件
4
查詢 Select 欄位 from 資料表名稱 where 條件
72/203
SQL指令
73/203
SQL指令
 在5-2 節中,,提到Command 物件的功能是負責
執行SQL 指令,那什麼是SQL 指令呢?SQL 指令
是結構化查詢語言(Structure Query Language),
用來驅動資料庫進行工作,也就是程式與資料庫
間溝通的共同語言
 主要作用的對象是資料表內的資料與結構,此處
我們只討論資料的部份。關於資料部份的SQL 指
令有四個,分別是新增、刪除、修改與查詢,各
自有一定的基本語法公式可以套用,以下列出這
四個語法的基本公式,並用表5-4的member 資料
表結構作說明:
74/203
表5-4、member資料表結構
表格: 使用者資料
member
欄位
Fieldname
DataType
Key
說明
使用者編號
pkid
int
PK
自動編號
使用者帳號
loginid
varchar 10
使用者密碼
loginpwd
varchar 10
使用者姓名
name
Varchar 8
年齡
age
int
75/203
SQL指令
 新增之SQL 指令語法:
 基本公式:Insert into 資料表名稱 (欄位1 名
稱,欄位2 名稱...) values (值1,值2...)
 套入member 資料表:Insert into member
(loginid,loginpwd,name,age) values
(‘abc’,’123’,’大雄’,12)
 上面語法會新增一筆姓名為「大雄」、帳號
為「abc」、密碼為「123」、年齡「12」歲
的資料進入member 資料表
76/203
SQL指令
 刪除之SQL 指令語法:
 基本公式:Delete from 資料表名稱 where 條
件
 套入member 資料表:Delete from member
where pkid=1
 上面語法會從member 資料表刪除一筆欄位
「pkid」等於1 的資料
77/203
SQL指令
 修改之SQL 指令語法:
 基本公式:Update 資料表名稱 set 欄位1 名
稱=新值1, 欄位2 名稱=新值2…where 條件
 套入member 資料表:Update member set
loginid=’aaa’,loginpwd=’222’ where name=’大
雄’
 上面語法會從member 資料表修改一筆欄位
「name」等於「大雄」的帳號與密碼資料,
新的帳號是「aaa」,密碼是「222」
78/203
SQL指令
 查詢之SQL 指令語法:
 基本公式:Select 欄位 from 資料表名稱
where 條件
 套入member 資料表:Select * from member
 上面語法會從member 資料表查詢出所有資
料
79/203
SQL指令
 套入member 資料表:Select * from member
where name=’大雄’
 上面語法會從member 資料表查詢出姓名等
於「大雄」的資料
 套入member 資料表:Select * from member
where name like ‘%小%’
 上面語法會從member 資料表查詢出姓名內
有「小」字的資料
80/203
SQL指令
 欄位型態如果是文字、字串或日期,需要在
「值」的部分加上單引號,例如上述的新增
與修改指令內,因為loginid、loginpwd、
name 等皆為文字型態,所以其值要用單引
號包住
 可以用「*」代表全部欄位,例如上述的查
詢指令:select * from
81/203
SQL指令
 條件可以是絕對正確與模糊(需要%符號)兩種,
例如:Select * from member where name=’大雄’,
就是絕對正確,一定要是姓名完全等於「大雄」
的才會被查詢出來
 另外一個是模糊比對,例如:Select * from
member where name like ‘%小%’,利用 % 符號代
表任何字元或字串,我們只關心姓名中有「小」
字的就要被查詢到,不管這個字是在字串的頭、
中間或是最後
 以SQL Server 為例,「--」代表的是SQL 指令的註
解符號
82/203
不寫程式連結資料庫
83/203
不寫程式連結資料庫
 本節先讓各位暖暖身,在不用撰寫任何一行
程式碼的狀況下,就能顯示出資
 料庫內的資料;但是如果要做更進階的查詢
與異動功能(包含新增、刪除與修
 改),使用者就必須要了解本章後面各節所
述的方法。
84/203
不寫程式連結資料庫
 延續使用CH5-1 的專案,在專案中另外建立
一個新表單(圖5-30),名稱為
TO_ACCESS.vb(圖5-31)。我們先用
ACCESS 資料庫做示範,選用的是微軟的北
風範例資料庫,資料庫名稱為
Northwind.mdb,您可以在光碟的CH5 目錄
內找到CH5-1 專案目錄,裡面有個DB 的目
錄,我們將此資料庫放在其中,並在表單上
佈置一個DataGridView 物件(工具箱>資料
>DataGridView),如圖5-32。
85/203
圖5-30、VS.NET 2008加入新表單畫面I
86/203
圖5-31、VS.NET 2008加入新表單畫面II
87/203
圖5-32、加入DataGridView物件畫面
88/203
不寫程式連結資料庫
 使用滑鼠左鍵開啟DataGridView 物件右上方
的一個小三角形圖示,就可以看到如圖5-33
所示的設定畫面。本節使用ACCESS 資料庫
為例,SQLServer 與MySQL 等資料庫部份
設定方法相同,就請讀者自行練習
89/203
圖5-33、設定DataGridView連結資料庫畫面
90/203
不寫程式連結資料庫
 出現如圖5-33 的設定畫面後,依序點選「選擇資
料來源>加入專案資料來源」,就可以看到圖534 的選擇畫面。還記得我們在5-2 節中說明了
VS.NET 2008 存取資料庫的架構與使用的物件嗎?
此節的重點是不要讓讀者寫到任何一行程式碼,
但是仍要讓讀者看到基本架構的存在。如圖5-34
~圖5-36 就是我們在前面各節中所述的Connection
物件設定畫面,首先看到的是圖5-39,此處請選
擇「資料庫」。
91/203
圖5-34、透過DataGridView設定Connection物件畫面I
92/203
圖5-35、透過DataGridView設定Connection物件畫面II
93/203
圖5-36、透過DataGridView設定Connection物件畫面III
94/203
圖5-37、透過DataGridView設定Connection物件畫面IV
95/203
圖5-38、Connection物件測試連接畫面
96/203
圖5-39、Connection物件設定完成畫面
97/203
不寫程式連結資料庫
 選擇「下一步」後可以看到圖5-40 的詢問視
窗畫面,詢問是否要將Northwind,mdb 資料
庫複製包入專案中,此處請選擇「否」,以
免日後程式執行與轉移上發生問題。
98/203
圖5-40、Connection物件設定完成後詢問畫面
99/203
不寫程式連結資料庫
 看到如圖5-41 的儲存連接字串畫面,請勾選「是,
將連接儲存為」,然後進入「下一步」,就可以
見到圖5-42 的畫面, 請選擇要顯示在
DataGridView 物件上的資料表與欄位,此步驟則
是對應到Command 物件中的SQL 指令,我們在圖
5-42 中選擇「供應商」資料表中的所有欄位。
100/203
不寫程式連結資料庫
 最後請選擇「完成」回到圖5-43 的畫面,原來圖
5-33 中沒有欄位名稱的DataGridView 物件出現了
在圖5-42 中選擇的資料表內欄位名稱,表示設定
成功;同時您應該也發現平台下方出現了三個自
動產生的物件。此時請讀者將啟動表單切換成
TO_ACCESS.vb 後就可以執行本表單,將可以看
到結果如圖5-44 之畫面,在沒有撰寫任何程式碼
的狀況下顯示出所要的資料。
101/203
圖5-41、儲存連接字串畫面
102/203
圖5-42、選擇要顯示資料表與欄位畫面
103/203
圖5-43、完成DataGridView物件設定之畫面
104/203
圖5-44、TO_ACCESS表單執行畫面
105/203
不寫程式連結資料庫
 這裡也可以搭配「工具箱>資料>
BindingNavigator」物件運作,BindingNavigator 物
件可以提供自動統計選用資料表內資料總筆數、
目前資料位置、移動資料位置、新增與刪除資料
等功能,如圖5-45 所示
 在TO_ACCESS表單加入BindingNavigator 物件後,
接著透過屬性視窗設定BindingNavigator物件的
BindingSource 屬性(圖5-46),就可以讓
BindingNavigator 物件產生作用,執行結果如圖547 所示。
106/203
圖5-45、TO_ACCESS表單中加入BindingNavigator物件畫面
107/203
圖5-46、設定BindingNavigator物件BindingSource屬性畫面
108/203
圖5-47、加入BindingNavigator物件後TO_ACCESS表單執行畫面
109/203
DataReader物件讀取資料
110/203
DataReader物件讀取資料
 本節說明如何寫程式使用Connection、
Command 與DataReader 物件連結ACCESS
資料庫讀取資料的方法。
 在CH5-1 專案中再建立一個名稱為
ACCESS_DR_READ.vb 新的表單,如圖548 所示。
111/203
圖5-48、表單ACCESS_DR_READ畫面
112/203
DataReader物件讀取資料
 開始在ACCESS_DR_READ 表單上佈置所
需要的物件,也就是設計使用者介面,如表
5-5 所示,我們需要從工具箱中取用一個
ListBox 物件與一個Button 物件(可以在通
用控制項那個區塊中找到這些物件),完成
後的畫面如圖5-49 所示。
113/203
表5-5、ACCESS_DR_READ表單上物件設定說明
物件
物件名稱(Name)
屬性設定
編號
1
ListBox
ListBox1
Font=新細明體, 14.25pt
2
Button
Button1
Text=連結Northwind.mdb
顯示資料
Font=新細明體, 12pt
114/203
圖5-49、ACCESS_DR_READ表單畫面
115/203
DataReader物件讀取資料
 完成ACCESS_DR_READ 表單上所需物件
佈置與屬性設定後,可以開始依據圖5-26 架
構所示撰寫程式碼,首先需要引用正確的名
稱空間,由於資料庫是MS ACCESS
( Northwind.mdb ) , 所以使用的是
System.Data.OleDb 名稱空間(表5-2),程
式碼為
Imports System.Data.OleDb
 撰寫位置與完成後畫面如圖5-50 所示。
116/203
圖5-50、引用System.Data.OleDb名稱空間畫面
117/203
DataReader物件讀取資料
 以Connection 物件為例,主要功能是建立與
資料庫系統的連線,所以需要給定資料庫系
統所在位置(IP 或是檔案目錄)、帳號、
密碼與資料庫名稱等參數,我們將這些參數
稱為「連接字串」,不同的資料庫有不同的
聯接字串寫法,您可以參考
http://www.connectionstrings.com 這個網站,
如圖5-51 所示,裡面收錄了目前市面上可以
見到的各式資料庫
118/203
圖5-51、connectionstrings網站畫面
119/203
DataReader物件讀取資料
 實際建立ACCESS 需要的Connection物件的程式碼
為:
Dim dbconn As OleDbConnection
dbconn = New OleDbConnection(連接字串)
 不管要連結哪一種資料庫,第一個動作都是要建
立Connection 物件,不要忘了本物件主要的功能
就是建立與資料庫系統的連線,需要給定「連接
字串」。此處我們需要的是ACCESS 資料庫,所
以請點選圖5-52 上的ACCESS,後續就請讀者自
行選擇您所需要的資料庫來獲得正確的連線字串。
120/203
圖5-52、www.connectionstrings.com網站上選擇ACCESS資料庫畫面
121/203
DataReader物件讀取資料
 點選ACCESS 資料庫的超連結後,可以看到
如圖5-53 有關ACCESS 資料庫連線字串的
整理畫面,我們使用的是 .NET 平台的
OleDbConnection 類別,資料庫也沒有設定
密碼,所以使用Standard Security 這段的連
線字串即可。
122/203
圖5-53、ACCESS資料庫的連線字串整理畫面
123/203
DataReader物件讀取資料
 如圖5-54所示,所宣告的物件名稱為dbconn,
資料庫名稱為Northwind.mdb,最後使用
dbconn 物件的Open 方法開啟資料庫,程式
碼如下所示,建立後如圖5-55 所示,最後記
得使用dbconn 物件的Close 方法關閉
ACCESS 資料庫,這對於檔案型資料庫尤其
重要。
124/203
圖5-54、建立Connection物件程式碼畫面
125/203
圖5-55、Connection物件建立完成後畫面
126/203
DataReader物件讀取資料
 而Command 物件所需要的參數有兩個,一
個是SQL 指令(第一個參數),另一個是
承接Connection 物件,這裡是dbconn 物件
(第二個參數),程式碼如下所示,畫面如
圖5-56 所示。
127/203
圖5-56、Command物件建立完成後畫面
128/203
DataReader物件讀取資料
 透過dbcmd 物件的ExecuteReader 方法將產
生一個「唯讀」的資料表物件,如果要可以
進行資料異動(包含新增、刪除與修改,請
參見5-5 節說明),完成後畫面如圖5-57 所
示。
129/203
圖5-57、DataReader物件建立完成後畫面
130/203
DataReader物件讀取資料
 最後請先將本專案的啟動表單切換成
ACCESS_DR_READ,再執行本專案,結果
將如圖5-59 所示,顯示出「Northwind.mdb」
資料庫中「客戶」資料表內「公司名稱」欄
位的所有資料。
131/203
圖5-58、Connection、Command與DataReader物件建立完成後畫面
132/203
圖5-59、ACCESS_DR_READ表單執行畫面
133/203
DataReader物件異動資料
134/203
DataReader物件異動資料
 5-4 節使用DataReader 物件與Command 物件的
ExecuteReader 方法進行ACCESS 資料庫的「唯讀」
存取,屬於圖5-27 中on-line 作業模式的其中一種。
由於是「唯讀」,所以無法進行新增、刪除與修
改等資料異動作業,但是只要架構不變,改用不
同的方法,就可以達成異動的目的。本節一樣使
用DataReader物件,而Command 物件則是改用
「ExecuteNonQuery」方法來達成資料異動的目的。
135/203
DataReader物件異動資料
 請在CH5-1 專案中再建立一個新表單,名稱
為ACCESS_DR_UPDATE.vb,如圖5-60 所
示
 其次,在ACCESS_DR_UPDATE 表單上佈
置所需要的物件,物件說明如表5-6 所示,
總共包含11 個物件,完成後如圖5-61 所示
136/203
圖5-60、CH5-1專案中建立ACCESS_DR_UPDATE表單畫面
137/203
表5-6、ACCESS_DR_UPDATE表單上物件設定說明
物件
編號
屬性設定
1
ListBox
Name= ListBox1
2
Button
Name=Button1
Text=刪除選取資料
3
Button
Name=Button2
Text=新增資料
4
Button
Name=Button3
Text=修改資料
5
Panel
Name= Panel1
BorderStyle=FixedSingle
6
TextBox
Name= TextBox1
7
TextBox
Name= TextBox2
8
TextBox
Name= TextBox3
9
Label
Name= Label1
Font=新細明體, 12pt
Text=客戶編號
10
Label
Name= Label2
Font=新細明體, 12pt
Text=公司名稱
11
Label
Name= Label3
Font=新細明體, 12pt
Text=聯絡人
138/203
圖5-61、ACCESS_DR_UPDATE表單介面畫面
139/203
DataReader物件異動資料
 新增、刪除與修改三項功能中刪除與修改都
需要有「特定對象」,所以需要由使用者點
選決定要刪除與修改的資料對象,再將其撰
寫在SQL 指令中的where 條件中;新增則不
需要。先針對「刪除」功能進行說明
140/203
DataReader物件異動資料
 此處是透過ListBox 讓使用者點選需要處理
的對象,會使用到ListBox 物件的
SelectedItem屬性,而前述程式碼一次顯示
出客戶編號、公司名稱與連絡人欄位的資料,
其中客戶編號為資料表的主鍵值,所以取出
SelectedItem 屬性後再用Split 方法將主鍵值
取出到item 陣列的item(0) 項目,做為後續
SQL 指令內的where 條件
141/203
DataReader物件異動資料
 本節最後說明修改資料功能,與新增與刪除功能
相同,都是使用DataReader物件搭配修改的SQL
指令(表5-3),但是需要有修改對象,所以SQL
指令如下所示:
sql = String.Format("update 客戶set 客戶編號='{0}',
公司名稱='{1}',連絡人='{2}' where 客
戶編號='{3}'", Textbox1.Text, Textbox2.Text,
Textbox3, item(0))
142/203
DataReader物件異動資料
 其中的Textbox1.Text、Textbox2.Text 與
Textbox3.Text 則是對應到表5-5 中的三個TextBox
物件,item(0) 則是使用者在ListBox 中所選擇要修
改的資料。
143/203
圖5-62、ACCESS_DR_UPDATE表單Load事件執行畫面
144/203
圖5-63、ACCESS_DR_UPDATE表單刪除功能執行畫面
145/203
圖5-64、ACCESS_DR_UPDATE表單新增功能執行畫面
146/203
圖5-65、ACCESS_DR_UPDATE表單修改功能執行前畫面
147/203
圖5-66、ACCESS_DR_UPDATE表單修改功能執行後畫面
148/203
DataSet
149/203
DataReader物件異動資料
 5-4 與5-5 節中針對圖5-27 中的on-line 結構方式存
取ACCESS 資料庫,本節將針對off-line 結構存取
ACCESS 資料庫來說明。依照前述方法,請讀者
在CH5-1 專案中建立第五個表單
ACCESS_DATASET。
150/203
DataReader物件異動資料
 不同於5-4 與5-5 節,本節使用DataGridView 物件
(工具箱>資料>DataGridView)替換ListBox 物
件來顯示資料, 同時將DataGridView 物件設定成
可以被新增(AllowUserToAddRows=True)、修
改與刪除(AllowUserToDeleteRows=True)資料,
並加入可以移動資料的BindingNavigator 物件,所
以ACCESS_DATASET表單上需要佈置的物件如表
5-7 所示,完成後如圖5-67 所示。
151/203
表5-7、ACCESS_DATASET表單上物件設定說明
屬性設定
編
號
物件
1
DataGridView
2
3
4
5
6
7
8
Button
Button
Button
Button
Button
9
Label
Name=Label1
Text=聯絡人職稱
10
Label
Name=Label2
Text=地址
Name= DataGridView1
AllowUserToAddRows=True
AllowUserToDeleteRows=Tru
e
ReadOnly=False
11
Label
Name=Label3
Text=城市
12
Label
Name= Button1
Text=第一筆
Name=Label4
Text=行政區
13
Label
Name= Button2
Text=下一筆
Name=Label5
Text=郵遞區號
14
Label
Name= Button3
Text=上一筆
Name=Label6
Text=
15
Label
Name= Button4
Text=最末筆
Name=Label7
Text=
16
Label
Name= Button5
Text=更新資料庫
Name=Label8
Text=
17
Label
Name=Label9
Text=
18
Label
Name=Label10
Text=
19
Panel
Name=Panel1
BindingNavig
ator
Name= BindingNavigator1
BindingSourc
e
Name= BindingSource1
152/203
圖5-67、ACCESS_DATASET表單介面畫面
153/203
圖5-68、ACCESS_DATASET表單執行畫面I
154/203
圖5-69、ACCESS_DATASET表單執行畫面II
155/203
圖5-70、ACCESS_DATASET表單執行畫面III
156/203
MS SQL Server資料庫之連結
157/203
MS SQL Server資料庫之連結
 5-4 ~ 5-6 節中以MS ACCESS 資料庫示範了圖5-26
中VS.NET 2008 存取資料庫的兩個主要結構( online 與off-line ) 與三個方法
( DataReader.ExecuteReadedr 、
DataReader.ExecuteNonQuery 、
DataAdapter+DataSet),本節則是將資料庫換成
支援client-server 架構的MS SQL Server,兩者主要
不同是在引用的名稱空間、建立物件使用的類別
與連線字串(如圖5-71,
http://www.connectionstrings.com 網站內容之資
料)。
158/203
圖5-71、SQL Server連線字串畫面
159/203
MS SQL Server資料庫之連結
 詳細的程式碼就請讀者自行參考5-4 ~ 5-6 節
方法進行,本節針對不同之處列表進行說明,
詳細如表5-8 之說明。
160/203
表5-8、ACCESS vs. SQL Server資料庫使用方式異同說明
項目
ACCESS
SQL Server
名稱空間
System.Data.OleDB
System.Data.Sqlclient
Connection
物件
OleDbConnection
SqlConnection
Provider=Microsoft.Jet.OLE
DB.4.0;Data Source=資料庫
所在;User
Id=admin;Password=;
Data Source=server位
置;Initial Catalog=資料庫
名稱;User Id=帳
號;Password=密碼;
Command
物件
OleDbCommand
SqlCommand
DataReader
物件
OleDbDataReader
SqlDataReader
DataAdapt
er物件
OleDbDataAdapter
SqlDataAdapter
Commandb
uilder物件
OleDbCommandBuilder
SqlCommandBuilder
連線字串
161/203
MySQL資料庫之連結
162/203
MySQL資料庫之連結
 本節則說明如何連結MySQL 資料庫,
MySQL 跟SQL Server 一樣都支援clientserver 架構,使用的是ODBC 類別名稱空間,
實作方法與5-4 ~ 5-6 節完全相同
 到http://www.connectionstrings.com 網站查詢
MySQL 的連線字串,如圖5-72 所示
163/203
圖5-72、MySQL資料庫連線字串畫面
164/203
程式封裝與部署
165/203
程式封裝與部署
 程式開發完成後,最重要的事情就是要交付
到使用者手上讓使用者使用,這個需要透過
「封裝與部署專案」。VS.NET 2008 支援封
裝成光碟與可透過網路安裝與更新(Clickonce)這兩種方式,本節就以本章的CH5-1
專案為例來對其進行封裝成可用光碟散佈的
安裝套件。
166/203
程式封裝與部署
 如圖5-73 所示,請讀者在CH5-1 專案內選擇
「檔案>加入>新增專案」,在圖5-74 的畫
面中請選擇其他專案類型中的「安裝和部署」
類型中的「安裝精靈」,並給定專案名稱為
CH5_Setup,建立與儲存位置在原CH5-1 專
案的儲存目錄中,按「確定」後開始精靈的
設定步驟,如圖5-75 所示,總共需要5 個步
驟就可以完成
167/203
圖5-73、在CH5-1專案中加入安裝和部署專案畫面
168/203
圖5-74、選擇加入安裝和部署精靈專案畫面
169/203
圖5-75、安裝和部署精靈設定畫面I
170/203
程式封裝與部署
 如圖5-76 所示為安裝精靈專案的第二個步驟,
選擇要建立的安裝程式的類型,此處為「建
立Windows 應用程式的安裝程式」,接著選
擇「下一步」進入步驟三
 步驟三則是要選擇要封裝打包的檔案,包含
EXE 檔案、資料庫檔案或是其他資源檔等,
此處選擇「內容檔」與「主要輸出」兩類
(圖5-77),「主要輸出」指的是EXE 檔案,
「內容檔」主要是針對需要的中介檔案等等
171/203
圖5-76、安裝和部署精靈設定畫面II
172/203
圖5-77、安裝和部署精靈設定畫面III
173/203
程式封裝與部署
 進入步驟四後就可以實際選擇所需要的檔案,
在5-1 節中曾經提到專案中bin 目錄底下的
Debug 與Release 目錄的用途,步驟四就需
要用到這兩個目錄,如果讀者您的EXE 檔
是建置在Debug 目錄下,請使用圖5-78 的
「加入」功能到Debug 目錄下選擇CH51.exe 執行檔,如圖5-79 所示,結果如圖580 所示
174/203
圖5-78、安裝和部署精靈設定畫面IV
175/203
圖5-79、選擇EXE檔與資料庫檔案畫面
176/203
圖5-80、完成選擇EXE檔與資料庫檔案畫面
177/203
程式封裝與部署
 最後一個步驟則是上述設定的小總結,提醒
設定人員做最後確認動作,如圖5-81 所示。
其次就進入圖5-82 的畫面,此部分主要是設
定應用程式安裝到使用者電腦後的狀態,例
如安裝的路徑、是否要在桌面出現捷徑與是
否要在開始選單出現選項等等,分別對應到
圖5-82 的「應用程式資料夾」、「使用者的
桌面」與「使用者的程式功能表」三個選項。
178/203
圖5-81、安裝和部署安裝精靈設定步驟五畫面
179/203
圖5-82、設定應用程式安裝到使用者電腦結果畫面
180/203
程式封裝與部署
 圖5-80 中選擇的EXE 檔案與資料庫將出現在圖5-
83 的應用程式資料夾中,包含有CH5-1.exe 執行
檔與Northwind.mdb 資料庫。如果要在桌面與開始
選單設定捷徑,方式如圖5-84 所示,請在CH51.exe 上點選滑鼠右鍵,功能表上可以看到「建立
CH5-1.exe 的捷徑」此選項,點選後會在應用程式
資料夾建立一個捷徑,請將其更名為CH5-1.exe 後,
點選拖入「使用者的桌面」中,如圖5-85所示
181/203
圖5-83、應用程式資料夾畫面
182/203
圖5-84、設定使用者桌面捷徑畫面
183/203
圖5-85、將CH5-1.exe捷徑拖入使用者的桌面畫面
184/203
程式封裝與部署
 使用同樣的捷徑建立方式也可以在使用者的
開始選單中建立捷徑,差別在於此出先建立
一個資料夾,名稱為CH5,如圖5-86 與5-87
所示,再將捷徑拖入「使用者的程式功能表」
中,結果如圖5-87
185/203
圖5-86、設定使用者功能表畫面I
186/203
圖5-87、設定使用者功能表畫面II
187/203
程式封裝與部署
 至此,所有的安裝和部署精靈專案的設定畫
面都已經完成,接著就是要透過「建置」產
生SETUP.EXE 檔案,VS.NET 2008 預設是
不對安裝和部署精靈專案進行建置動作的,
所以請先選擇「建置>組態管理員」選項,
如圖5-88 所示,請勾選CH5_Setup 專案中的
建置檢核鈕(checkbox)
188/203
圖5-88、設定組態管理員畫面
189/203
程式封裝與部署
 最後請選擇「建置>建置方案」來開始進行
專案的封裝與建置,如圖5-89所示,建置需
要一段時間,待畫面左下角出現「建置成功」
才算完成
190/203
圖5-89、安裝與部署專案建置畫面
191/203
程式封裝與部署
 完成建置後可以在CH5-1\CH5_Setup\Debug
目錄中見到如圖5-90 的封裝完成檔案,共有
兩個檔案,分別是setup.exe 與
CH5_Setup.msi,將此兩個檔案燒成光碟就
可以給使用者進行安裝動作。安裝程式將自
動檢查使用者電腦是否有需要的 .NET
Freamwork,如果沒有將自動下載安裝,請
讀者自行測試,本章將不再贅述
192/203
圖5-90、安裝與部署建置完成畫面
193/203
POS銷售系統
194/203
POS銷售系統
 我們在本節作一個小總合,利用上面各節介
紹的技術製作一個小銷售系統,當中包含會
員基本資料管理、銷售、銷售查詢與登入登
出功能。請讀者在練習6 中繼續完成產品管
理與進貨功能設計。
195/203
表格: 使用者資料
member
欄位
Fieldname
DataType
Key
說明
使用者編號
pkid
int
PK
自動編號
使用者帳號
loginid
varchar 10
使用者密碼
loginpwd
varchar 10
使用者姓名
name
Varchar 8
年齡
age
int
表格: 產品資料
product
欄位
Fieldname
DataType
Key
說明
產品編號
p_id
int
PK
自動編號
產品名稱
p_name
varchar 255
售價
pricre
int
196/203
表格: 銷售主表
sales
欄位
Fieldname
DataType
Key
說明
銷售編號
s_id
int
PK
自動編號
產品名稱
pkid
int
FK
連結member資料表
銷售日期
s_day
datetime
表格: 銷售明細表
sales_list
欄位
Fieldname
DataType
Key
說明
銷售細表編號
sl_id
int
PK
自動編號
銷售編號
s_id
int
FK
連結sales資料表
產品編號
p_id
int
FK
連結product資料表
銷售數量
num
int
197/203
POS銷售系統
 總共有四個資料表,分別是客戶資料表
(member)、產品資料表(product)、銷
售主資料表(sales)、銷售明細資料表
(sales_list),請讀者參考上面的欄位說明,
自行在SQL Server 資料庫上建立資料庫。四
張資料表的關係如圖5-91所示
198/203
圖5-91、資料表關聯圖
199/203
POS銷售系統
 現在可以開始來建立專案,名稱為POS,將
Form1 表單建立成登入視窗,如圖5-92。
 其次使用MDI 表單建立主系統畫面,並在
其上佈置一個下拉選單物件(MenuStrip),
如圖5-93 所示。其它表單畫面請讀者自行參
考光碟CH5 目錄內的POS 專案。
200/203
圖5-92、登入畫面
201/203
圖5-93、主畫面
202/203
POS銷售系統
 在登入部分我們處理了SQL Injection 問題,
可以進行簡單的銷售作業與記錄查詢作業;
而基本資料維護部分只完成了會員資料,請
讀者參考會員資料的程式碼,自行撰寫產品
資料的維護功能。另外,本系統也只做了銷
售部份,若是要有基本進銷存功能,尚缺進
貨作業,這部分我們也留給讀者自行練習設
計與開發。
203/203