Visual C# 2010 程式設計經典 第15章 ADO .NET與資料工具
15.1 資料工具簡介 .NET應用程式在資料庫程式設計方面,是使用ADO .NET做為存取資料庫的介面,目前為ADO .NET 4.0版本。 ADO .NET採用新穎的物件觀念,是專為Microsoft .NET平台所量身打造的,由於採用離線存取模式,可供多人同時存取,因此特別適合在Internet環境中使用。 本章將介紹如何使用BindingSource、 DataGridView 、 DataSet及BindingNavigaor資料控制項快速建立簡單的資料庫應用程式,並說明如何使用上述控制項提供的方法對資料庫中的資料表記錄做查詢、新增、修改、刪除、關聯…等處理。
BindingSource 控制項可用來取得資料來源並繫結至表單的控制項上,並提供Insert()、RemoveAt()…等方法,可簡化資料新增、修改、刪除、篩選、巡覽的操作。 DataSet 控制項可以用來設定具型別的DataSet物件,DataSet內允許有多個DataTable,DateSet就好像是記憶體中的資料庫,DataTable就好像是記憶體中的資料表,您可將DataTable物件進行關聯,或將記憶體DataSet進行新增、修改、刪除,然後再一次存回資料庫。 DataGridView 控制項可用來在表單上顯示和編修各種不同資料來源的表格式資料。 BindingNavigator 控制項可以用來在表單上巡覽、新增、刪除DataSet中的資料。若BindingNavigator 和BindingSource 控制項搭配使用,可以操作資料庫上的資料,如記錄移動、新增、刪除等功能。
15.2 資料庫概念 資料庫 就是以一貫作業方式,將一群相關資料收集,在 「資料庫管理系統」控制下,達到統一管理目的。 資料庫 就是以一貫作業方式,將一群相關資料收集,在 「資料庫管理系統」控制下,達到統一管理目的。 資料庫管理系統 是一套用來管理與存取資料庫檔案的程式。 一個公司各部門有其個別資料,彼此間也有共同資料 若公司電腦化,各部門資料各自獨立管理。 某些共用資料各部門重複建檔。 資料分散,異動更改多處,易造成資料不一致, 且資料安全性不高。
若能以資料庫的方式來建立資料 使得各部門間所建立的資料檔或資料表彼此 間產生關聯(Relation)。 透過資料庫管理程式來處理資料 便可達到 資料集中管理的效果。
15.2.1 資料庫與資料表 多個相關的資料表便可組成一個資料庫。 15.2.1 資料庫與資料表 欄位(Column) 多個相關的資料表便可組成一個資料庫。 資料表為二維結構 每一水平列稱為一筆記錄; 每一垂直行為一組欄位資料。 資料庫最少會包含有一個資料表,資料表中包含 所需的資料欄位(Field) 。
小型資料庫如 Access 資料庫,是將多個資料表儲存在 一個副檔名為 小型資料庫如 Access 資料庫,是將多個資料表儲存在 一個副檔名為 *.mdb 資料庫檔案中 優點 普遍且易建立 缺點 不適合處理超大量資料,個人應用綽綽有餘。 大型資料庫如 Microsoft SQL Server資料庫,可將 資料庫分散在不同硬碟、甚至不同電腦上: 優點 執行效能高 (數秒內可從數千萬筆資料中搜尋 所需要的資料)、適合用在處理超大量資料。 缺點 必須另外學習資料庫管理與建置方法,及 購置資料庫軟硬體,一般較常用在企業上。
15.2.2 關聯式資料庫 「關聯式資料庫」主要是為 避免資料重複登錄,以及 防止資料做新增、修改、 刪除發生異常。 15.2.2 關聯式資料庫 「關聯式資料庫」主要是為 避免資料重複登錄,以及 防止資料做新增、修改、 刪除發生異常。 做法是產生關聯的資料表必須有使資料表彼此間可互相對應的欄位方能產生關聯。
未經過正規化的資料表
經過正規化的資料表
15.3 SQL Express資料庫介紹 15.3.1 SQL Server 2008簡介 Microsoft SQL Server 屬於大型的資料庫,目前已發展到SQL Server 2008的版本 該資料庫可分散在不同的磁碟、甚至是不同的電腦上 優點 可結合應用XML、執行效能高(數秒內就可以從數千萬筆 資料中搜尋出所需要的資料)、適合用在處理超大量資料 缺點 是必須另外學習資料庫的管理與建置方法,較常用在企業。 ADO.NET 可存取 SQL Server 7.0 以上的版本。
當安裝 Visual C# 2010 Express Edition 時預設會安裝 SQL 2008 Express 版本。 該版本屬於 SQL Server 2008 的精簡版。 它含蓋 SQL Server 常用功能,如資料表、檢視表、 函式、預存程序或觸發器…等等。 透過VC# 2010 的「資料庫總管」視窗可連接 SQL Server 2008 或 SQL 2008 Express 資料庫。 可透過「資料庫總管」視窗來管理資料表、檢視表、 函式、預存程序或觸發器(在VS 2010中資料庫總管稱為伺服器總管)。
15.3.2 如何新增SQL 2008 Express 資料庫 練習透過Visual Studio 2010或Visual C# 2010 Express Edition整合開發環境來建立SQL Express 2008的資料庫。 本例操作步驟請參閱15-7~15-8頁或教學影片。
15.3.3 資料表欄位的資料型別
15.3.4 如何設計資料表 資料表在建立時,一定要先規畫好每一個欄位的資料型別與相關屬性,最後才進一步輸入資料表的記錄。
本例操作步驟請參閱15-10~15-15頁或教學影片。
15.3.5 如何設計資料庫圖表 在Visual Studio 2010透過「伺服器總管」可以管理所連接的資料庫,下面介紹如何使用「伺服器總管」來建立資料庫圖表,並透過資料庫圖表建立資料表與資料表之間的關聯,如一對一關聯,一對多關聯或多對多關聯。 如下圖,「部門」資料表的部門編號與「員工」資料表的部門編號是屬於一對多的關聯(一個部門會有多個員工)。請依下面操作練習製作部門與員工的關聯資料庫圖表。 本例操作步驟請參閱15-15~15-18頁或教學影片。
15.3.6 如何輸入資料到資料表 當建立好資料表,接著就可以將資料記錄輸入到資料表內,或是藉由程式來新增、刪除、修改資料表內的資料,請依下面操作,練習輸入資料到「部門」與「員工」這兩個資料表內。 本例操作步驟請參閱15-18~15-20頁或教學影片。
15.3.7 如何設計檢視表 檢視表是執行SQL查詢敘述所得到的查詢結果,其使用時機可將複雜或重複出現的查詢做成檢視表,如此可降低查詢的複雜度,方便程式的維護。 也可以針對不同的使用者設計不同的檢視表,以提升資料安全及保密性。 以下例來說,若要常常查詢「部門」及「員工」這兩個資料表的部門名稱、員工編號、姓名、電話、薪資的資料,且以薪資的10%當做員工的獎金,並計算出每一位員工的實領薪資,因此可以製作一個檢視表直接查詢就可以了,如此就不用每一次都要重複輸入相同且複雜的查詢SQL敘述。 接著依下列步驟自行練習製作名稱為「員工實領薪資」的檢視表。(本例操作步驟請參閱15-20~15-25頁或教學影片)
15.4 ADO .NET簡介 15.4.1 ADO .NET簡介 ADO .NET 是微軟新一代 .NET 資料庫的存取架構 ADO是ActiveX Data Objects 的縮寫,目前最新版本為ADO .NET4.0。 ADO .NET 是資料庫應用程式和資料來源間溝通的橋樑。 提供一個物件導向的資料存取架構,用來開發資料庫 應用程式。
ADO .NET 具有下列優異性 成為目前資料庫程式設計師用來開發資料庫應用程式的 主要介面: ADO .NET 是在 .NET Framework 上存取資料庫的一組 類別程式庫。它定義一個資料庫存取的標準介面。只要學 會 ADO .NET提供物件架構 可輕易存取所有支援 .NET Framework Data Provider 的資料庫。 ADO .NET是應用程式和資料庫來源之間溝通的橋樑。 ADO .NET可提高資料庫的延展性(Scalability)。 ADO .NET處理的資料可以透過HTTP通訊協定來傳遞。 ADO .NET將存取資料和資料處理的部份分開,以達到離線存取資料的目的。
ADO .NET 架構分成 .NET Data Provider (指資料來源提供者) DataSet資料集 (資料處理核心)
15.4.2 .NET Framework Data Provider 簡介 .NET Framework Data Provider(.NET Framewrk資料提供者)是指存取資料來源的一組類別程式庫,主要是為了統一對於各類型資料庫來源的存取方式而設計出來的一套高效能類別程式庫。
在 .NET Framework Data Provider中包含了下表四種物件:
15.4.3 DataSet簡介 DataSet 是在 ADO .NET 離線資料存取架構中核心物件。 主要使用時機是在記憶體中暫存並處理各種從資料來源中 所取回的資料。 DataSet 就是一個存放在記憶體中的資料暫存區,這些 資料必須透過 DataAdapter 物件與資料庫做資料交換。 在 DataSet 內部允許同時存放一個或多個不同的資料表。 資料表是由資料列和資料欄所組成的,並包含有主索引鍵、外部索引鍵、資料表間的關聯資訊及資料格式條件限制。
DataSet 作用像記憶體中的資料庫管理系統,在離線時,DataSet也能獨自完成資料的新增、修改、刪除、查詢 等作業,不必一直侷限在和資料庫連線時才能做資料維 護的工作。 DataSet 可用於存取多個不同的資料來源、XML資料或 做為應用程式暫存系統狀態暫存區。 資料庫可經由 Connection 物件來連接,便可透過Command 物件將 SQL 語法(如INSERT、UPDATE、DELETE、SELECT)交由資料庫引擎(如Microsoft SQL Server)去執行,並透過 DataAdapter物件將資料查詢 結果存放到離線 DataSet 物件中,進行離線資料編修, 以降低資料庫連線負擔具有極大助益。
15.5 .NET Framework Data Provider 這些結果可能會直接經過處理、放入 DataSet、與來自多種資料來源的資料合併、或是在多層次架構下的各層間作資料傳遞。 對資料庫做資料存取時,先要與資料庫取得連接,連接 最主要的目的是進行資料庫系統的連接、帳戶驗證、與 資料庫指定。 接著下達查詢、新增、刪除、修改…等SQL命令來進行 資料庫的管理。 在使用程式來管理資料庫前,要先確定使用哪個 Data Provider 來存取資料庫。
Data Provider 是一組用來存取資料庫的物件 在 .NET Framework 中常用四組 .NET Framework Data Providers 是 SQL、OLE DB、ODBC、Oracle。 介紹 - .NET Framework Data Provider for SQL Server - .NET Framework Data Provider for OLE DB
一 .NET Framework Data Provider for SQL Server 支援Microsoft SQL Server 7.0、2000、2005、2008 以上版本 由於它使用自己的通訊協定且做過最佳化,可直接存取SQL Server 資料庫,不必用 OLE DB 或ODBC (開放式資料庫連接層)介面,因此執行效能較佳。 若程式中是用 .NET Framework Data Provider for SQL Server,則該 ADO .NET 物件名稱前都要加上Sql 如:SqlConnection、SqlCommand、SqlDataAdapter、SqlDataReader。
二. .NET Framework Data Provider for OLEDB 支援透過 OLE DB 介面來存取像 Dbase、FoxPro、Excel、Access、Oracle、以及SQL Server…等各類型資料來源的存取。 程式中若用 .NET Framework Data Provider for OLE DB,則 ADO .NET 物件名稱前要加上 OleDb 如 OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbDataReader。
15.6 資料工具的使用 在 VS 2010 整合環境下,工具箱的資料工具內有產生與 資料庫相關的 DataGridView, BindingSource, BindingNavigator 三個控制項,如下圖:
15.6.1 BindingSource與DataGridView 控制項的使用 接著下面範例以逐步方式,說明如何使用BindingSource控制項擷取資料表的資料並填入DataSet物件,最後再將DataSet物件繫結到DataGridView控制項,快速建立簡單的資料庫應用程式。
本例操作步驟請參閱15-31~15-41頁或教學影片。
15.6.2 BindingSource控制項常用成員
本例操作步驟請參閱15-42~15-53頁或教學影片。
15.6.3 BindingNevigator控制項的使用 上一個範例我們必須使用BindingSource所提供的方法及屬性並撰寫相對應的程式才能編修或巡覽資料表的記錄,在工具箱內另外提供BindingNavigator控制項,它是可巡覽、新增、修改資料表記錄的工具列,讓您完全不用撰寫程式,即可巡覽、新增、刪除表單上的資料。 若BindingNavigator 的BindingSource屬性繫結到BindingSource 控制項,此時BindingNavigator即可以操作表單上的資料,如記錄移動、新增、刪除等功能。 如下圖的工具列即是BindingNavigator控制項。
本例操作步驟請參閱15-54~15-55頁或教學影片。
15.7 資料庫的關聯查詢 既然資料庫可以放置許多相關的資料表,表示這些資料表中有些欄位資料是相關聯的。 15.7 資料庫的關聯查詢 既然資料庫可以放置許多相關的資料表,表示這些資料表中有些欄位資料是相關聯的。 特別是在造冊、表列資料時,常常利用關聯(Relation)的技術從不同的資料表中取出相關欄位資料來對照。 [範例] DBAp4.sln 製作兩個關聯資料表的資料庫應用程式。將本章製作MyDB.mdf資料庫的部門及員工資料表的「部門編號」欄位進行關聯,然後再將資料記錄與兩個DataGridView做資料繫結,使選取部門資料表的某筆記錄之後,即會顯示該部門的所有員工。
本例操作步驟請參閱15-56~15-62頁或教學影片。