VB 資料庫應用 資科系 林偉川 關連式資料庫 Access MS-SQL Oracle MySQL 資料庫種類 2 1
Access 資料庫 可看到一個資料表, 是由 m 列 n 欄的表格所組成 每一列即為一筆記錄 (record), 每一欄即為一個欄位或資料欄 (field) 一個資料表可擁有多筆記錄 ( 最多十億筆 ) 一筆記錄內可擁有多個資料欄 ( 最多 255 欄 ) 就一個資料欄言, 也可擁有多個字元 ( 純文字欄, 最多 255 個字元 整個資料表內容最大上限為 2 GB 減去系統物件所需的空間 ) 3 Access 資料庫 一個或以上的字元可組成一個資料欄 一個或以上的資料欄可組成一筆記錄 一筆或以上的記錄可組成一個資料表 一個或以上的資料表可組成一個資料庫 資料表是 Access 資料庫用來存放資料的地方, 其內擺放著一組為某種目的而蒐集在一起 有組織 的資料 使用者可在資料表上進行檢視資料 查詢 增 / 刪記錄 更新資料 Access 資料庫就是架構在資料表上 4 2
資料表 記錄數 資料欄 Access 資料庫的規格上限 文字欄內容 一筆記錄總字元數及備忘 ) 總字元數 2048 個 十億筆 255 欄 255 個字元 2000 個字元 ( 不含 OLE 二十億個位元組減去系統物件所需的空間 5 使用 Access 建立資料庫 欄位名稱 資料型別 長度 BookID 文字 6 BookTitle 文字 30 BookPrice BookPubDate 貨幣 日期 / 時間 6 3
開放資料庫連結協定 (ODBC for VB6) 不同資料庫的一個統一連結協定 ODBC 包含 應用程式 (Application) 驅動程式管理者 (Driver Manager) 驅動程式 (Driver) 資料來源 (Data Source) Vb 支援物件 Data Adodc 7 ADO.NET 簡介 ADO.NET 是微軟新一代的技術, 它是 ADO (ActiveX Data Object) 元件的後繼者, 其主要的目的是在.NET Framework 平台存取資料, 簡單的說, VB.NET 技術就是使用 ADO.NET 進行資料庫的存取 ADO.NET 的目的是提供一致的物件模型, 用來存取和編輯資料來源的資料, 至於資料來源並不限資料庫, 以 VB.NET 的應用來說, ADO.NET 的主要功能是存取資料庫 8 4
如何使用 ADO.NET 建立資料庫 建立資料庫的步驟, 如下所示 : 建立資料庫, 使用 Access 建立所需的資料庫 使用 OLE DB 提供者建立資料庫連結 使用 ADO.NET 存取資料庫的內容 啟動瀏覽程式執行 ASP.NET 程式測試網頁資料庫 ADO.NET 主要物件有 :Connection Command DataReader DataSet 物件 9 如何使用 ADO.NET 建立資料庫 以連結 Access 資料庫為例, 在程式碼使用 ADO.NET 時, 需要使用 Imports 關鍵字匯入 OLE DB 所需的名稱空間 Namespace, 如下所示 :Imports System.Data.OleDb 使用 SQL Server 資料庫, 其匯入的名稱空間, 如下所示 :Imports System.Data.SqlClient 10 5
如何使用 ADO.NET 讀取資料庫 用 Connection 物件建立資料來源的資料連結 再用 Command 物件對資料來源下 SQL 指令, 執行後取得資料來源的資料 再用 DataReader 物件讀取並填入 DataSet 物件 最後再使用 DataBinding 在表單控制項控制 11 Book 資料表 BookID BookTitle BookAuthor BookPrice BookDate F8534A XML 網頁製作徹底研究 陳會安 NT$650.00 2002/7/1 F8920 ASP.NET 網頁製作徹底研究 陳會安 NT$650.00 2002/10/1 P611 ASP 3.0 網頁設計範例教本 陳會安 NT$550.00 2001/4/1 P631 Java 2 程式設計範例教本 陳會安 NT$630.00 2002/3/1 S708 資料庫理論與實務 陳會安, 陳峰棋 NT$590.00 2002/5/1 12 6
ADO.NET-Connection 物件 Connection 物件可以建立與存取資料來源的連結, 以資料庫來說 Connection 物件還負責初始資料庫,Connection 物件一共分為兩種 : OLE DB: 使用 OleDbConnection 物件 (access) SQL Server: 使用 SqlConnection 物件 (sql server) 需要一連結字串 str, 是 OLE DB 提供用來建立的資料來源字串 以 Access 資料庫系統為例, 資料庫 Books.mdb 的 str 字串, 如下所示 : str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & C:\Books.mdb" 13 ADO.NET-Connection 物件 連結字串 str, 若以 SQL Server 為例, 要利用 Sqlconnection 物件建立連結, 其字串如下 : str = server=ip;database=user; uid=wayne;pwd=1234 14 7
ADO.NET-Command 物件 Command 物件可以對資料來源執行指令, 以資料庫的資料來源而言, 就是執行 SQL 指令, 在建立 Connection 物件與資料庫連結後, 就可以使用 Command 物件執行 SQL 指令 Command 物件也分為兩種 : OLE DB: 使用 OleDbCommand 物件 (access) SQL Server: 使用 SqlCommand 物件 (sql server) 15 使用 DataReader 物件讀取資料庫 VB.NET 應用程式, 使用 ADO.NET 存取資料庫最簡單且快速的方式是使用 DataReader 物件 16 8
ADO.NET-DataReader 物件 ADO.NET 的 DataReader 物件可以從資料來源使用 Command 物件執行 SQL 指令, 取得如同循序檔案一般唯讀且單向的資料流 因為 DataReader 只在記憶體儲存一筆記錄, 所以能夠提升應用程式的執行效能, 並且降低系統的負荷 DataReader 物件分為兩種 : OLE DB: 使用 OleDbDataReader 物件 (access) SQL Server: 使用 SqlDataReader 物件 (sql server) 17 使用 DataReader 物件讀取 DB 之步驟 步驟 1: 建立和開啟資料庫連結 首先我們需要建立 Connection 物件來連結資料庫, 如下所示 : Dim obj As OleDbConnection obj = New OleDbConnection(str) Obj.open() Str 字串變數指定資料來源的字串, 如下所示 : str ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "..\Books.mdb" 18 9
連結字串所要用到不同資料庫內容 資料庫 Access SQL Server Oracle 提供者名稱 Microsoft.Jet.OL EDB.4.0 SQLOLEDB MSDAORA 範例 Provider=Microsoft.Jet.O LEDB.4.0;Data Source=..\Books.mdb server=localhost;datab ase=user; uid=wayne;pwd=1234 19 使用 DataReader 物件讀取 DB 之步驟 步驟 2: 建立 Command 物件 在開啟資料庫連結後, 就可以建立 Command 物件, 並且指定欲執行的 SQL 指令字串, 如下所示 : Dim cmd As OleDbCommand cmd =New OleDbCommand("SELECT * FROM Book", obj) 20 10
使用 DataReader 物件讀取 DB 之步驟 步驟 3: 取得 DataReader 物件 在建立好 Command 物件後, 接著就可以使用 ExecuteReader 方法執行 SQL 指令取得 DataReader 物件, 如下所示 : Dim dr As OleDbDataReader dr = cmd.executereader() 上述程式碼取得 DataReader 物件 dr 21 使用 DataReader 讀取 DB 之步驟 Execute 方法 ExecuteNonQuery ExecuteScalar ExecuteReader 說明執行 SQL 指令但是不會傳回任何資料, 通常是使用在第 14-5 節資料庫操作指令 INSERT DELETE 和 UPDATE 執行 SQL 指令從資料表只取得一個欄位資料, 如果是資料表, 就是第 1 筆記錄的第 1 個欄位值執行 SQL 指令傳回 DataReader 物件 22 11
使用 DataReader 物件讀取 DB 之步驟 步驟 4: 取出查詢結果的資料表記錄資料 DataReader 物件如同循序檔案一般, 當執行 SQL 指令取得 DataReader 物件後, 就如同開啟一個讀取的 DataReader 檔案, 程式碼需要使用 While 迴圈讀取資料表的每一筆記錄, 如下所示 : Do While dr.read() T1.Text &= dr.item("bookid") & vbtab T1.Text &= dr.item("booktitle") & vbtab T1.Text &= dr.item("bookprice") & vbtab T1.Text &= dr.item("bookpubdate") & vbnewline Loop 23 使用 DataReader 物件讀取 DB 之步驟 步驟 5: 關閉 DataReader 和資料庫連結 最後需要關閉 DataReader 物件和資料庫連結的 Connection 物件, 如下所示 : dr.close() obj.close() 上述程式碼使用 Close 方法關閉 DataReader 和 Connection 物件 24 12
完整程式碼 Dim str As String="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Bk.mdb" Dim obj As OleDbConnection= New OleDbConnection(str) obj.open() Dim cmd As OleDbCommand= New OleDbCommand("Select * From Book", obj) Dim dr As OleDbDataReader = cmd.executereader() T1.Text = "BookID" & vbtab & "BookTitle" & vbtab & vbtab & vbtab T1.text &= "BookPrice" & vbtab & "BookPubDate" & vbnewline Do While dr.read() T1.Text &= dr.item("bookid") & vbtab T1.Text &= dr.item("booktitle") & vbtab T1.Text &= dr.item("bookprice") & vbtab T1.Text &= dr.item("bookpubdate") & vbnewline Loop dr.close() obj.close() 25 DataSet 和 DataTable 物件 DataSet 物件是由 DataTable 物件所組成, DataSet 物件可以代表一個儲存在記憶體的資料庫, 每一個 DataTable 儲存一個資料表的記錄資料, 每一個 DataRow 物件就是一筆記錄 在建立好 Connection 物件的資料庫連結後, 使用 DataAdapter 物件的 Fill 方法將資料表的資料填入 DataSet 物件, 也就是資料表的 DataTable 物件 DataAdapter 物件分為兩種 : OLE DB: 使用 OleDbDataAdapter 物件 (access) SQL Server: 使用 SqlDataAdapter 物件 (sql server) 26 13
將資料表填入 DataSet 物件 DataSet 物件可以建立儲存在記憶體中的資料庫, 每一個資料表是一個 DataTable 物件 不同於 DataReader 物件,DataSet 物件如同循序檔案, 需要將資料表的記錄資料先填入 DataSet 物件, 然後再來顯示 DataSet 物件的記錄資料 27 將資料表填入 DataSet 物件 步驟 1: 建立 Connection 物件 如同上一節的 DataReader 物件, 我們還是需要使用 Connection 物件建立資料連結, 如下所示 : obj = New OleDbConnection(str) obj.open() 上述程式碼建立 obj 的資料連結物件, 然後開啟資料庫連結 28 14
將資料表填入 DataSet 物件 步驟 2: 建立 DataAdapter 物件 在 DataSet 物件是使用 DataAdapter 物件取得記錄資料, 這個物件屬於 DataSet 和 Connection 物件資料來源間的橋樑, 以便將資料表填入 DataSet 物件 DataAdapter 物件也擁有兩個版本,SQL Server 的是 SqlDataAdapter, 以本節為例是使用 OLE DB 的 OleDbDataAdapter, 如下所示 : Dim da As OleDbDataAdapter da = New OleDbDataAdapter("SELECT * FROM Book", obj) 29 將資料表填入 DataSet 物件 步驟 3: 建立 DataSet 物件填入記錄資料 現在我們就可以建立 DataSet 物件, 執行 DataAdapter 的 SQL 查詢指令, 將記錄資料填入 DataSet 物件, 如下所示 : Dim ds As DataSet = New DataSet() da.fill(ds, "Books") 30 15
將資料表填入 DataSet 物件 步驟 4: 取出查詢結果的資料表記錄資料 在使用 DataAdapter 物件將資料表記錄填入 DataSet 後, 請使用 For Each 迴圈取出每一個 DataRow 物件, 也就是一筆記錄, 如下所示 : Dim objr As DataRow For Each objr in ds.tables("books").rows T1.Text &= objr("bookid") & vbtab T1.Text &= objr("booktitle") & vbtab T1.Text &= objr("bookprice") & vbtab T1.Text &= objr("bookpubdate") & vbnewline Next 31 將資料表填入 DataSet 物件 步驟 5: 關閉資料庫連結 最後記得關閉資料庫連結, 以此例建立的 Connection 物件為 objcon, 如下所示 : obj.close() 32 16
完整程式碼 Dim str As String="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Bk.mdb" Dim obj As OleDbConnection= New OleDbConnection(str) obj.open() Dim da As OleDbDataAdapter da = New OleDbDataAdapter("Select * From Book", obj) Dim ds As DataSet = New DataSet() da.fill(ds, "Book") Dim objr As DataRow For Each objr In ds.tables("book").rows T1.Text &= objr("bookid") & vbtab T1.Text &= objr("booktitle") & vbtab T1.Text &= objr("bookprice") & vbtab T1.Text &= objr("bookpubdate") & vbnewline Next obj.close() 33 DataGrid 控制項顯示資料表 DataGrid 控制項可以將資料來源的資料以表格方式顯示, 例如 : 將資料表的記錄資料如同 Excel 試算表一般的顯示每筆記錄和欄位資料 34 17
DataGrid 控制項顯示資料表 35 DataGrid 控制項顯示資料表 當表單新增 DataGrid 控制項後, 只需將資料表的記錄資料填入 DataSet 物件, 就可以指定 DataGrid 控制項的 DataSource 屬性, 如下所示 : dg.datasource = ds.tables("books") 上述程式碼將 DataGrid 控制項的資料來源指定成 DataSet 物件名為 Books 的 DataTable 物件 36 18
DataGrid 控制項顯示資料表 - 屬性 屬性 Name CaptionText AllowSorting DataSource ReadOnly 說明控制項名稱控制項的標題文字設定是否可按一下資料欄的標頭, 就以此欄位進行排序, 預設值 True 可以,False 為不可以設定控制項的資料來源, 可以是 DataSet 和 DataTable 等物件控制項是否為唯讀, 預設值 False 為不是,True 為唯讀 37 DataSet 物件和 DataGrid 控制項 步驟 1: 建立和開啟資料庫連結 首先我們需要建立 Connection 物件來連結資料庫, 如下所示 : Dim obj As OleDbConnection obj = New OleDbConnection(str) Obj.open() Str 字串變數指定資料來源的字串, 如下所示 : str ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "..\Books.mdb 38 19
DataSet 物件和 DataGrid 控制項 步驟 2: 建立 DataAdapter 物件 在開啟資料庫連結後, DataSet 物件就可以使用 DataAdapter 物件取得記錄資料, 並且指定欲執行的 SQL 指令字串, 如下所示 : Dim da As OleDbDataAdapter da=new OleDbDataAdapter("SELECT * FROM Book", obj) 39 DataSet 物件和 DataGrid 控制項 步驟 3: 建立 DataSet 物件填入紀錄資料 建立 DataSet 物件執行 DataAdapter 的 SQL 查詢命令, 將紀錄填入 DataSet 物件, 如下所示 : Dim ds As DataSet=new DataSet() da.fill(ds, 資料表 ) 40 20
DataSet 物件和 DataGrid 控制項 步驟 4: 設定 DataGrid 控制項之 DataSource Dg.datasource=ds.tables( 資料表 ) 41 DataSet 物件和 DataGrid 控制項 步驟 5: 關閉資料庫連結 最後需要關閉資料庫連結的 Connection 物件, 如下所示 : obj.close() 上述程式碼使用 Close 方法關閉 Connection 物件 42 21
完整程式碼 Dim str As String="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Bk.mdb" Dim obj As OleDbConnection=New OleDbConnection(str) obj.open() Dim da As OleDbDataAdapter da = New OleDbDataAdapter("Select * From Book", obj) ds = New DataSet() da.fill(ds, "Book") Dg1.DataSource = ds.tables("book") obj.close() 43 SQL 語言的基礎 SQL(Structured Query Language) 為 ANSI(American National Standards Institute) 標準的資料庫語言,SQL 指令語法可以用來存取和更新資料庫的記錄, 目前 Access SQL Server Informix Oracle 和 Sybase 等資料庫系統都支援 ANSI 的 SQL 語言 44 22
SQL 語言的指令 SQL 語言的指令可以分為 4 大部分, 如下表所示 : 資料定義語言 DDL (Data Definition Language): 屬於資料表建立和欄位定義的 SQL 指令 資料操作語言 DML (Data Manipulation Language): 屬於資料表記錄插入 刪除和更新指令 資料查詢語言 DQL (Data Query Language): 屬於資料表查詢指令, 只有一個 SELECT 指令 資料控制語言 DCL (Data Control Language): 屬於資料庫安全設定和權限管理指令 45 SQL 的查詢指令語法 在 SQL 語言的資料查詢指令只有一個 SELECT 指令, 完整的指令語法如下所示 : SELECT 欄位 1, 欄位 2 FROM 資料表 WHERE conditions 上述 SELECT 指令的欄位 1~2 為記錄的欄位,conditions 為查詢條件, 這個指令使用口語來說是 從資料表取回符合 WHERE 子句條件的記錄, 顯示欄位 1 和 2 46 23
SQL 的查詢指令記錄欄位 使用 "*" 符號代表所有資料表的欄位, 表示取回資料表記錄的所有欄位, 如下所示 : SELECT * FROM Book 上述指令沒有 WHERE 子句, 所以是將資料內所有的記錄和欄位取回 47 SQL 的單一查詢條件 WHERE 子句 SQL 查詢指令的單一條件,WHERE 子句的基本規則和範例, 如下所示 : 文字欄位要加上單引號, 如下所示 : SELECT * FROM Book WHERE BookID='F8111A' 數字欄位並不需要額外的字元括起, 如下所示 : SELECT * FROM Book WHERE BookPrice>550 文字的欄位可以使用 LIKE 包含運算子配合 "%" 萬用字元, 此時查詢的條件子句只需包含的子字串就符合條件, 如下所示 : SELECT * FROM Book WHERE BookID LIKE '%1%' 數字或日期欄位可以使用 <> > < >= 和 <= 不等於 大於 小於 大於等於和小於等於等運算子建立多樣化的查詢條件 48 24
SQL 的多重查詢條件 WHERE 子句 WHERE 子句的查詢條件可以使用 AND 和 OR 邏輯運算子連接, 其基本語法, 如下所示 : AND 且運算子 : 連接的前後條件都必須成立, 整個條件才能成立, 例如 : 書號包含 "3" 且書名有 " 研究 " 的子字串, 如下所示 : SELECT * FROM Book WHERE BookID LIKE '%3%' AND BookTitle LIKE '% 研究 %' OR 或運算子 : 連接的前後條件只需任何一個成立即可, 例如 : 書號包含 "3" 或書名有 " 研究 " 的子字串, 如下所示 : SELECT * FROM Book WHERE BookID LIKE '%3%' OR BookTitle LIKE '% 研究 %' 49 SQL 的查詢指令排序輸出 SQL 的查詢結果可以指定欄位進行由小到大, 或由大到小排序, 只需在 SELECT 指令的最後加上 ORDER BY 子句即可, 如下所示 : SELECT * FROM Book WHERE BookPrice>=500 ORDER BY BookPrice 上述查詢結果使用 BookPrice 欄位排序, 預設是由小到大的 ASC, 如果想倒過來由大到小, 只需加上 DESC, 如下所示 : SELECT * FROM Book WHERE BookPrice>=500 ORDER BY BookPrice DESC 50 25
SQL 的查詢指令 - 聚合函數 函數 Count(Column) Avg(Column) Max(Column) Min(Column) Sum(Column) StDev(Column) StDevP(Column) Var(Column) 說明計算記錄筆數計算欄位平均值取得記錄欄位的最大值取得記錄欄位的最小值取得記錄欄位的總計統計樣本的標準差統計母體的標準差統計樣本的變異數 VarP(Column) 統計母體的變異數 51 Data 物件之屬性 (VB 6) Connect Access Excel ( 較有限制 ) DataBaseName db1.mdb Recordset type 0- 資料表 RecordSource 資料表名稱 Exclusive True (one person/time), False (sharable) 52 26
Data 物件之屬性 欲瀏覽物件之 DataSource 屬性 標籤 唯讀 文字方塊 可讀寫 DataSource data1 DataField 欄位名稱 DataFormat 資料格式 (data 物件此欄不支援 ) MS FlexGrid 資料儲存格 53 ADODC 物件之屬性 專案 / 設定使用元件選 ADODC 物件 CommandType 2 adcmdtable ConnectionString ( 使用 ODBC 連接 ) RecordSource 資料表 欲瀏覽物件之 DataSource 屬性 標籤 唯讀 文字方塊 可讀寫 DataSource Adodc1 DataField 欄位名稱 DataFormat 資料格式 MS DataGrid 資料儲存格 54 27
ADODC 物件 55 ADO 物件之 CommandType 屬性設定 56 28
ADO 物件之 ConnectionString 屬性設定 57 ADO 物件之 ConnectionString 屬性設定 58 29
ADO 物件之 ConnectionString 屬性設定 59 ADODC 使用連接字串 DBQ=D:\temp\linway\vb\db1.mdb;DefaultDir =D:\temp\linway\vb;Driver={Driver do Microsoft Access (*.mdb)};driverid=25;fil=ms Access;FILEDSN=D:\temp\linway\vb\db1.md b;maxbuffersize=2048;maxscanrows=8;pag etimeout=5;safetransactions=0;threads=3;u ID=admin;UserCommitSync=Yes; 60 30
ADODC 物件屬性 61 ADODC 物件屬性 62 31
ADO 物件之 RecordSource 屬性設定 63 ADODC 物件之執行結果 1 64 32
ADODC 物件之執行結果 2 65 使用 VB6 建立資料庫 66 33
使用 VB6 建立資料庫 67 使用 VB6 建立資料庫 68 34
使用 VB6 建立資料庫 69 移動至第一筆紀錄 紀錄指標之移動 Adodc1.Recordset.MoveFirst 往前一筆紀錄 Adodc1.Recordset.MovePrevious 往後一筆紀錄 Adodc1.Recordset.MoveNext 移動至最後一筆紀錄 Adodc1.Recordset.MoveLast 70 35
VB6 紀錄指標之移動判斷 判斷資料指標是否為最前端 Adodc1.Recordset.BOF 判斷資料指標是否為最後端 Adodc1.Recordset.BOF 71 VB6 資料表處理移動畫面 72 36
VB6 資料表處理之程式 Private Sub Form_Load() Adodc1.Caption = " 訂單 " C1(0).Caption = " 第一筆紀錄 " C1(1).Caption = " 往前一筆紀錄 " C1(2).Caption = " 往後一筆紀錄 " C1(3).Caption = " 最後一筆紀錄 " C1(4).Caption = " 結束 " End Sub 73 VB6 資料表處理之程式 Private Sub C1_Click(Index As Integer) Select Case Index Case 0: Adodc1.Recordset.MoveFirst Case 1: If Not Adodc1.Recordset.BOF = True Then Adodc1.Recordset.MovePrevious If Adodc1.Recordset.BOF = True Then Adodc1.Recordset.MoveNext End If End If 74 37
VB6 資料表處理之程式 Case 2: If Not Adodc1.Recordset.EOF = True Then Adodc1.Recordset.MoveNext If Adodc1.Recordset.EOF = True Then Adodc1.Recordset.MovePrevious End If End If Case 3: Adodc1.Recordset.MoveLast Case 4: End End Select End Sub 75 VB6 新增及刪除記錄 新增記錄 Adodc1.Recordset.AddNew 刪除記錄 If Adodc1.Recordset.BOF = False Then Adodc1.Recordset.Delete End If Adodc1.Recordset.MovePrevious 76 38
VB6 自己寫程式 Private Sub Command1_Click() MsgBox Adodc1.Recordset.RecordCount While Not Adodc1.Recordset.EOF MsgBox Adodc1.Recordset.Fields.Count For i = 0 To Adodc1.Recordset.Fields.Count - 1 T1.Text = T1.Text & Adodc1.Recordset.Fields.Item(i) & " " Next T1.Text = T1.Text & Chr(13) & Chr(10) Adodc1.Recordset.MoveNext Wend End Sub 77 ADO.NET 執行畫面 (DataReader) 78 39
ADO.NET 程式 Dim obj As OleDbConnection Dim cmd As OleDbCommand Dim dr As OleDbDataReader Dim str, out As String str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Books.mdb" obj = New OleDbConnection(str) obj.open() ' 開啟資料庫連結 79 ADO.NET 程式 cmd = New OleDbCommand("SELECT * FROM Book", obj) dr = cmd.executereader() out = " 欄位數 : " & dr.fieldcount & vbnewline out &= " 書號 " & vbtab & " 書名 " & vbtab & vbtab & vbtab & " 作者 " & vbtab & vbtab & " 書價 " & vbtab & " 出版日期 " & vbnewline 80 40
ADO.NET 程式 While dr.read() out &= dr.item("bookid") & vbtab out &= dr.item("booktitle") & vbtab If Len(dr.Item("BookAuthor")) > 3 Then out &= dr.item("bookauthor") & vbtab Else out &= dr.item("bookauthor") & vbtab & vbtab End If 81 ADO.NET 程式 out &= dr.item("bookprice") & vbtab out &= dr.item("bookpubdate") & vbnewline End While dr.close() ' 關閉 DataReader obj.close() ' 關閉資料庫連 T1.Text = out T1.SelectionLength = 0 82 41
ADO.NET 執行畫面 (DataSet) 83 ADO.NET 程式 Dim ds As DataSet Dim obj As OleDbConnection Dim cur, max Private Sub Form1_Load T1.Text = "SELECT * FROM 書籍訂單 " B1.Text = " 下一筆 : B2.Text = " 上一筆 : B3.Text = " 結束 " l1.text = "SQL 指令 :" L2.Text = " 客戶名稱 " L3.Text = " 書籍名稱 " L4.Text = " 日期 : L5.Text = " 單價 : L6.Text = " 數量 " T2.Text = " : T3.Text = " : T4.Text = " : T5.Text = " : T6.Text = "" 84 42
ADO.NET 程式 Dim da As OleDbDataAdapter Dim str As String str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb" obj = New OleDbConnection(str) obj.open() ' 開啟資料庫連結 da = New OleDbDataAdapter(T1.Text, obj) ds = New DataSet da.fill(ds, " 書籍訂單 ") max = ds.tables(" 書籍訂單 ").Rows.Count cur = 1 L7.Text = cur & "/" & max showrecord(cur) End sub 85 ADO.NET 程式 Sub showrecord(byval pos As Integer) Dim row As DataRow row = ds.tables(" 書籍訂單 ").Rows(pos - 1) t2.text = row(" 客戶名稱 ") t2.selectionstart = Len(t2.Text) t2.focus() T3.Text = row(" 書籍名稱 ") T4.Text = row(" 日期 "): T5.Text = row(" 單價 ") T6.Text = row(" 數量 ") L7.Text = cur & "/" & max End Sub 86 43
ADO.NET 程式 Private Sub B1_Click If cur < max Then cur += 1 showrecord(cur) End If End Sub 87 ADO.NET 程式 Private Sub B3_Click obj.close() ' 關閉 DataReader Dim ok = MsgBox(" 確定結束?", MsgBoxStyle.OKCancel, " 確定 ") If ok = MsgBoxResult.OK Then End End Sub Private Sub B2_Click If cur > 1 Then cur -= 1 showrecord(cur) End If End Sub 88 44
ADO.NET 執行畫面 (DataGrid) 89 ADO.NET 程式 Private Sub Form1_Load T1.Text = "SELECT * FROM 書籍訂單 " Button1.Text = " 查詢 : l1.text = "SQL 指令 :" End Sub Private Sub Button1_Click Dim obj As OleDbConnection Dim da As OleDbDataAdapter Dim str As String 90 45
ADO.NET 程式 str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb" obj = New OleDbConnection(str) obj.open() ' 開啟資料庫連結 da = New OleDbDataAdapter(T1.Text, obj) Dim ds As DataSet = New DataSet da.fill(ds, " 書籍訂單 ") dg.datasource = ds.tables(" 書籍訂單 ") obj.close() ' 關閉 DataReader End Sub 91 46