Microsoft PowerPoint - vb13.ppt

Similar documents
Microsoft PowerPoint - VB14.ppt

untitled

untitled

2 ADO.NET Internet 1.2

untitled

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

投影片 1

untitled

(Microsoft PowerPoint -

VB控件教程大全

第 一 章 資料庫概念

Microsoft PowerPoint - asp15

目錄

<463A5CC2A4B6ABD1A7D4BA5CBDCCD1A7D6B8C4CFD7DC5CA1B C B3CCD0F2C9E8BCC6A1B7BFCEB3CCD6B8C4CF2E646F63>

Microsoft PowerPoint - asp14

3 Driver do Microsoft Access (*.mdb) hisdata IFIX 1.4

ASP.NET 2.0網頁設計範例教本

幻灯片 1

Microsoft PowerPoint - ASP_NET_08

untitled

Microsoft PowerPoint - ASP_NET_09

Microsoft PowerPoint - course10.ppt

穨ac3-4.PDF

基于ECO的UML模型驱动的数据库应用开发1.doc

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

一 個 SQL Injection 實 例 的 啟 示 頁 2 / 6 因 此, 在 知 名 網 站 上 看 到 SQL Injection, 讓 人 驚 心, 卻 不 意 外 網 站 專 案 外 包 是 目 前 業 界 的 常 態, 而 在 價 格 取 勝 的 制 度 下, 低 價 得 標 的 S

四川省普通高等学校

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

11 天 山 区 区 环 卫 清 运 队 机 械 工 程 师 4011 C 1 不 限 不 限 机 电 具 有 两 以 工 作 经 12 天 山 区 乌 鲁 木 齐 市 第 15 小 会 计 4012 C 1 不 限 不 限 会 计 财 会 财 电 算 化 临 床 医 预 防 医 公 共 卫 生 与

穨文件1

0SQL SQL SQL SQL SQL 3 SQL DBMS Oracle DBMS DBMS DBMS DBMS RDBMS R DBMS 2 DBMS RDBMS R SQL SQL SQL SQL SELECT au_fname,au_ lname FROM authors ORDER BY

ebook46-23

ACI pdf

Microsoft PowerPoint - VB5

Microsoft Word - 關聯性資料庫.doc

Chapter 16 集合

教案模板4-2

ThreeDtunnel.doc

27 :OPC 45 [4] (Automation Interface Standard), (Costom Interface Standard), OPC 2,,, VB Delphi OPC, OPC C++, OPC OPC OPC, [1] 1 OPC 1.1 OPC OPC(OLE f

VB程序设计教程

12-1. 資料庫基礎觀念 (1). 使用 Access 建立資料庫及資料表 : (2)..NET 2005 讀取資料庫的部分, 雖然工具箱的控制項與.NET 2003 稍有不同, 但是核心程式碼, 還是維持與.NET 2003 相同的架構 (3). 但是.NET 2005 的 web 程式 (As

Microsoft Word - 小心翼翼的二十一點N.doc

ebook 132-2

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2

基于UML建模的管理管理信息系统项目案例导航——VB篇

(Microsoft PowerPoint - \245\250\266\2606)

上海市教育考试院关于印发新修订的

untitled

PowerPoint Presentation

NIIT APP T ECH,,,,,, C++ : C++, C++,,, C++,,,,, : ,,,, ;,, ( CIP) C++ /,,. :, (21.) ISBN C..

<4D F736F F D20C9CFBAA3CAD0BCC6CBE3BBFAB5C8BCB6BFBCCAD4C8FDBCB6BFBCCAD4B4F3B8D95FBDA8D2E9B8E55F5F E646F63>

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w

Excel VBA Excel Visual Basic for Application

PowerPoint Presentation

RUN_PC連載_12_.doc

RunPC2_.doc

多層次傳銷與獎金系統

WQ.s92

使用手冊

ADO.NET 資料庫存取架構


高 职 计 算 机 类 优 秀 教 材 书 目 * 序 号 书 号 (ISBN) 书 名 作 者 定 价 出 版 / 印 刷 日 期 ** 配 套 资 源 页 码 计 算 机 基 础 课 计 算 机 应 用 基 础 刘 升 贵 年 8 月

TC35短信发送程序设计

Microsoft PowerPoint - VB3

习题1

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

天津天狮学院关于修订2014级本科培养方案的指导意见

untitled

導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式

一 新增 SQL Express 2008 資料庫 步驟一 : 首先, 利用 VB 新增一個 Windows Form 應用程式的專案, 專案名稱為 MyDB 專案名稱為 MyDB 步驟二 : 接下來, 請執行 VB 功能表上的 專案 / 加入新項目, 此時, 請在 加 入新項目 的對話方塊中, 選

Microsoft Word - ASP2DB1002.doc

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

MVB-1001.DOC

Visual Basic D 3D

附件3:

untitled

Microsoft Word - 书目文件.doc

FAQ -PowerDesigner9.5.DOC

投稿類別:資訊類

mv t ï Catch ex As Exception MessageBox.Show(" «t ï ") Finally ' myconnection.close() End Try SqlConnection(ByVal connectionstring As String) pâ nç á

untitled

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

PPBSalesDB.doc


輕鬆學 Dreamweaver CS5 網頁設計..\Example\Ch0\ \.html..\example\ch0\ \mouse.txt..\example\ch0\ \ _Ok.html 學習重點 JavaScript 複製程式碼 mouse.txt Ctrl+C Ctrl+C 0-4

季刊9web.indd

全 国 高 等 职 业 教 育 规 划 教 材 21 世 纪 高 职 高 专 规 划 教 材 系 列 高 等 职 业 教 育 计 算 机 专 业 规 划 教 材 选 题 征 集 通 知 一 选 题 范 围 ( 不 仅 限 于 此 ) 选 题 方 向 选 题 名 计 算 机 基 础 计 算 机 应 用

第6章  数据库技术基础


Microsoft PowerPoint - 資料庫程式設計教材.pptx

if (command == null) throw new ArgumentNullException("command"); if (commandparameters!= null) foreach (SqlParameter p in commandparameters) if (p!= n

HTML網頁基礎語言

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

职 位 类 别 : 测 试 工 程 师 工 作 经 验 或 实 习 经 历 : 不 限 岗 位 要 求 : 1. 本 科 及 其 以 上 学 历, 计 算 机 相 关 专 业 2014 届 毕 业 生 ; 2. 实 习 时 间 要 求, 尽 量 一 周 五 个 工 作 日 ; 3. 熟 悉 Wind

untitled

Chapter 00 導論

epub 61-6

(DMO) 1 1 Microsoft Windows SQL Server 2005 SQL Server Analysis ServicesNotification Services SQL Server 8 SQL Server IP SQL Server 2005 SQL Server 20

7 DataSet DataSet TableColumnDataSet DataSet NOTE DataSet DataAdapterDataSetDataAdapter DataSet DataSetDataSetDataSet NorthwindDataSet DataSet Dim Nor

Microsoft Word - 面向应用能力,构建师范院校计算机公共课程 “三层次教育”课程体系new.doc

Transcription:

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