附件三 VB 與 SQL Express 資料庫結合 ADO.NET 是程式語言與資料庫存取的一個非常重要的媒介 因此, 我們可以利用 VB2010 C#2010 ASP.NET 4.0 及 J# 等程式語言來撰寫應用程式, 再透過 ADO.NET 就可以輕易的存取資料庫的資料了 因此, 當我們安裝完成 Visual Studio 2010 或 Visual Basic 2010 Express Edition 軟體時, 它預設就會自動安裝 SQL Express 2008 版本, 而此版本是屬於 SQL Server 2008 的精簡版, 所以, 它也包括 SQL Server 常用的功能 例如 : 建立資料庫 資料表 ( 含欄位名稱 資料型態及大小 ) 檢視表 預存程序 等 接下來, 我們可以透過 VB 的整合開發環境中的 資料庫總管 (Visual Basic 2010 Express Edition 版本 ) 或稱 伺服器總管 (Visual Studio 2010 版本 ) 來連接到 SQL Server 2008 或 SQL Express 2008 的資料庫了
一 新增 SQL Express 2008 資料庫 步驟一 : 首先, 利用 VB 新增一個 Windows Form 應用程式的專案, 專案名稱為 MyDB 專案名稱為 MyDB 步驟二 : 接下來, 請執行 VB 功能表上的 專案 / 加入新項目, 此時, 請在 加 入新項目 的對話方塊中, 選擇 服務架構資料庫, 並命名資料庫的名稱為 MySQLDB.mdf MySQLDB.mdf
步驟三 : 此時, 請你選擇 資料集 的資料庫模型後, 再按 下一步, 最後再 按 完成 鈕即可 在完成以上的步驟之後,VB 的整合開發環境中的 方案總管 就會自動加入 MySQLDB.mdf 資料庫了
二 建立資料表 接下來, 您可以開啟剛才建立的 MySQLDB.mdf 資料庫檔案, 以建立資料表來實際存放資料 而資料庫設計的好壞將會直接影響到整個資料庫的存取效率及空間 因此, 在建立資料表之前, 必須要注意以下幾點原則 : 1. 有相關的欄位才能放到同一個資料表中 2. 資料表之間, 除了 關聯欄位 之外, 不要重複存放相同欄位的資料 3. 每一個欄位的必須要給予適當的資料類型 例如 : 姓名是屬於文字類型, 成績則是整數類型 4. 每一個資料表中的欄位個數不宜過多, 如果欄位個數過多並且有太多的重複現象時, 可以進行分割成多個資料表, 而各個資料表之後再透過 關聯欄位 來建立關聯 一般而言, 資料表分割的原則如下 : (1) 單一資料表中有過多的重複欄位值 (2) 某欄位值與該資料表的主鍵無關 利用 SQL Express 2008 建立資料表 步驟一 : 請執行 VB 功能表上的 檢視 / 伺服器總管 (Visual Studio 2010 版本 ) 或 檢視 / 其他視窗 / 資料庫總管 (Visual Basic 2010 Express Edition 版本 ), 此時, 請在 伺服器總管 的對話方塊中, 點選 資料連接 左邊的 +, 再點選 MySQLDB.mdf 左邊的 +, 即可展開 MySQLDB.mdf 資料庫的維護環境
步驟二 : 接下來, 我們就來開始在 MySQLDB.mdf 資料庫中, 加入新的資料表 如下圖所示 按滑鼠右鍵 步驟三 : 結果會出現下面的資料表欄位設計環境 一 新增欄位 延續上一節的內容, 我們將建立一個 學生資料表, 其所需要的欄位名稱 及相關摘要說明如下表所示 : 學生資料表 欄位名稱 資料型態 欄位大小 允許 Null 主索引鍵 學號 nchar 8 否 是 姓名 nchar 4 是 班級 nchar 10 是 電話 nchar 10 是 在 學生資料表 的需求建立之後, 接著就可以依序新增這些欄位, 其步驟如下 : 步驟一 : 在資料表中制定欄位名稱 資料類型及欄位大小及相關的屬性值
輸入欄位名稱 設定資料類型 設定欄位大小 欄位屬性值的設定環境區 步驟二 : 當我們設計 學生資料表 的欄位名稱時, 必須先要知道那一個欄位值是唯一的 ( 不能重複或 NULL 空的 ), 來當作主鍵 設定主鍵的方法如下 :Mouse 移到學號欄位的左邊按一下左鍵後, 該列便會出現反白區, 再將 Mouse 移到上面的工具列上點選主索引的工具鈕
此時 學號 欄下面的欄位屬性中的屬性將會改變, 如上的允許 Null 屬性中的屬性值為 : 否 步驟三 : 完成 學生資料表 的欄位名稱 資料類型及欄位屬性值的設定後, 當然要把資料表儲存起來, 預設的資料表名稱為 Table_1, 我們現在把資料表名稱改為我們所須要的 學生資料表 的名稱 按 儲存 輸入 學生資料表 按 確定
步驟四 : 完成了資料表定義之後, 如下圖所示 : 二 刪除欄位 如果我們在規劃資料表的過程中, 經常會發生 建立不必要的欄位 的情況, 此時, 我們可以將他們加以刪除 其說明如下 : 步驟一 : 先點選欲修改的 學生資料表 上按滑鼠的 右鍵, 再按 開啟資料表定義 鈕即可
按 右鍵 步驟二 : 先選取欲刪除的 欄位, 此時按下滑鼠的右鍵, 即可開啟如下圖所示 的快顯功能表 接著點選 刪除資料行 鈕即可刪除該欄位了 選取後, 再按 右鍵
注意 當我們順利的刪除資料行之後, 再按 儲存 鈕時, 卻無法儲存 如下圖所 示 解決方法 請執行 VB 功能表上的 工具 / 選項, 此時, 請在 選項 的對話方塊中, 先點選下方處的 顯示所有設定, 再點選 資料庫工具 / 資料庫和資料表設計工具 之後, 請再將 防止儲存需要重新建立資料表的變更 選項取消勾選, 此時, 我們就可以順利修改資料表中的欄位了
三 插入欄位 由於我們在初步的規劃資料表的過程中, 學生的班級是填入全名, 但是可能未能符合實際的需求, 因此, 我們在上一節中已經加以刪除, 但是卻也缺少了學生所就讀的 科系代碼表 並且我們為了未來要建立關聯式資料庫, 因此, 我們加插入一個外鍵 系碼 欄位名稱 如下圖所示 : 同樣的步驟, 再建立一個 科系代碼表, 如下圖所示 : 科系代碼表 欄位名稱 資料型態 欄位大小 允許 Null 主索引鍵 系碼 nchar 4 否 是 系名 nchar 10 是 系主任 nchar 10 是 四 建立資料庫關聯圖 在前面單元中, 已經建立兩個資料表, 分別是 學生資料表 與 科系代碼表, 因此, 在本單元中, 我們將利用 SQL Express2008 中的 資料庫圖表 來建立 資
料庫關聯圖 其步驟如下所示 : 步驟一 : 新增資料庫圖表 按右鍵 步驟二 : 加入資料表請在 加入資料表 對話方塊中, 選取欲建立關聯圖所須要的資料表之後, 再按 加入 鈕 如下所示:
步驟三 : 建立 資料庫關聯圖 科系代碼表的主鍵 系碼 拖曵到學生資料表的外鍵 系碼 主鍵 外鍵
步驟四 : 儲存 資料庫關聯圖 在完成關聯圖的建立之後, 再按 儲存 鈕, 此時, 請輸入資料庫關聯圖的名稱, 如下圖所示
五 新增記錄到資料表中 在完成建立資料庫及資料表之後, 此時 學生資料表 中還沒有任何的記錄 因此, 接下來, 就是要來介紹如何在 SQL Express 2008 資料庫中新增記錄到資料表中 步驟一 : 開啟剛才建立的 學生資料表, 如下圖所示 : 按右鍵
步驟二 : 輸入五筆記錄, 如下圖所示 : 輸入以上五筆記錄 步驟三 : 相同的步驟, 再輸入三筆記錄到 科系代碼表 中 如下圖所示 : 輸入以上三筆記錄
六 連接已存在資料庫 在我們利用 VB 的整合開發建立完成資料庫及資料表之後, 如果下一次在開啟時, 則預設為關閉狀態 因此, 我們就必須要再重新 連接至資料庫
七 如何利用 VB 連接資料庫 如果我們要利用 VB2010 來存取資料庫時, 必須要用到 ADO.NET 物件, 而如何使用 ADO.NET 內的物件呢? 非常簡單, 您只要在撰寫程式前面先引用 (Imports)ADO.NET 的命名空間 (Namespace), 如此編譯器在編譯您的程式時, 才可以知道您所用的物件必須從那一個命名空間載入, 因此, 我們就可以非常輕易的使用我們的 VB2010 來存取資料庫 引用 (Imports)ADO.NET 的命名空間 (Namespace) 的方法 : Imports 命名空間的物件名稱 一 引用 System.Data.OleDb 命名空間 ( 適用 Access Excel FoxPro 等資料庫 ) 當你 VB2010 所連結的資料庫為 Access Excel FoxPro 時, 須在每一支程式開頭撰寫如下兩行程式 Imports System.Data Imports System.Data.OleDb 說明 : 表示要引用 ADO.NET 基礎物件以及引用 OLE DB 資料來源的物件
二 若您要連結的資料庫來源是 SQL Server 7.0 以上版本, 則您必須將 System.Data.Oledb 改成 System.Data.SqlClient 這個命名空間 (Namepace), 所以, 當你 VB2010 所連結的資料庫為 SQL Server 7.0 以上版本的資料庫, 須在每一支程式開頭撰寫如下兩行程式 Imports System.Data Imports System.Data.SqlClient 說明 : 表示要引用 ADO.NET 基礎物件以及引用 SQL Server 資料來源的物件 三 VB 與資料庫標準連結方式, 基本上, 有以下五個步驟 : < 以 SQL Server 為例 > 1. 步驟一 : 引用命名空間 Imports System.Data Imports System.Data. SqlClient 2. 步驟二 : 設定資料庫名稱與帳號及密碼 Dim Source as String Source = "server=localhost;" Source += "database= 資料庫名稱 ;" Source += "user id=sa;" Source += "password=12345" ' 宣告連線的字串 ' 伺服器 ' 資料庫 ' 登入的帳號 ' 密碼 3. 步驟三 : 宣告及建立 Connection 物件 Dim conn As SqlConnection conn = New SqlConnection(Source) ' 宣告連線的物件 ' 連線 4. 步驟四 : 使用 Open 方法來開啟資料庫 conn.open() ' 開啟資料庫 5. 步驟五 : 使用 Close 方法來關閉資料庫 conn.close() ' 關閉資料庫 VB 連接三個不同的資料庫環境 一 VB 與 Access2003/2007/2010 為例
格式 Imports System.Data Imports System.Data.OleDb Dim Source as String 'Access 2003 版本 ' 宣告連線的字串 Source = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & 資料庫路徑 'Access 2007 版本或 'Access 2010 版本 Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & 資料庫路徑 Dim conn As OleDbConnection conn = New OleDbConnection(Source) conn.open() 程式區段 --------------- --------------- --------------- conn.close() 實例 ' 開啟資料庫 ' 關閉資料庫 ' 宣告連線的物件 ' 連線 Imports System.Data Imports System.Data.OleDb Public Class Form1 Private Sub Button1_Click( ) Handles Button1.Click 'Access 2003 版本 ' Dim dbpath As String = "DBMS.mdb" ' Dim Source As String ' 宣告資料庫所在的路徑變數 ' 宣告連線的字串 ' Source = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath 'Access 2007 版本或 Access 2010 版本 Dim dbpath As String = "DBMS.accdb" Dim Source As String ' 宣告資料庫所在的路徑變數 ' 宣告連線的字串 Source = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbpath Dim conn As OleDbConnection conn = New OleDbConnection(Source) ' 宣告連線的物件 ' 連線 conn.open() ' 開啟資料庫 MsgBox(" 成功連結到 Access 資料庫 ") conn.close() ' 關閉資料庫 End Sub End Class
二 VB 與 SQL Server 2008 為例 格式 Imports System.Data Imports System.Data. SqlClient Dim Source as String Source = "server= 主機名稱 ;" Source += "database= 資料庫名稱 ;" Source += "user id= 帳號 ;" Source += "password= 密碼 " Dim conn As SqlConnection conn = New SqlConnection(Source) conn.open() ' 開啟資料庫程式區段 --------------- --------------- --------------- conn.close() ' 關閉資料庫 ' 宣告連線的字串 ' 伺服器 ' 資料庫 ' 登入的帳號 ' 密碼 ' 宣告連線的物件 ' 連線 實例 Imports System.Data Imports System.Data.SqlClient Public Class Form1 Private Sub Button1_Click( ) Handles Button1.Click Dim Source As String Source = "server=localhost;" Source += "database=dbms;" ' 宣告連線的字串 ' 伺服器 ' 資料庫
Source += "user id=sa;" ' 登入的帳號 Source += "password=12345" Dim conn As SqlConnection conn = New SqlConnection(Source) ' 密碼 ' 宣告連線的物件 ' 連線 conn.open() ' 開啟資料庫 MsgBox(" 成功連結到 SQL Server 的伺服器 ") conn.close() ' 關閉資料庫 End Sub End Class 三 VB 與 SQL Express 2008 為例 格式 Imports System.Data Imports System.Data. SqlClient Dim Source as String ' 宣告連線的字串 名稱 證 Source = "Data Source=.\SQLEXPRESS;" Source += "AttachDbFilename= DataDirectory \ 資料庫名稱.mdf;" Source += "Integrated Security=True;" Source += "User Instance=True" Dim conn As SqlConnection conn = New SqlConnection(Source) conn.open() ' 開啟資料庫程式區段 --------------- --------------- --------------- conn.close() ' 關閉資料庫 ' 伺服器 ' 資料庫路徑與 ' 登入的帳號認 ' 新使用者執行 ' 宣告連線的物件 ' 連線 實例 Imports System.Data Imports System.Data.SqlClient Public Class Form1 Private Sub Button1_Click( ) Handles Button1.Click Dim Source As String ' 宣告連線的字串
Source = "Data Source=.\SQLEXPRESS;" ' 伺服器 名稱 證 Source += "AttachDbFilename= DataDirectory \ch14_db.mdf;" Source += "Integrated Security=True;" Source += "User Instance=True" ' 資料庫路徑與 ' 登入的帳號認 ' 新使用者執行 Dim conn As SqlConnection conn = New SqlConnection(Source) ' 宣告連線的物件 ' 連線 conn.open() ' 開啟資料庫 MsgBox(" 成功連結到 SQL Express 的伺服器 ") conn.close() ' 關閉資料庫 End Sub End Class