Windows 程式設計 ADO.NET 資料存取 ( 一 ) 講師 : 林賢達 Peter.lin@imestech.com 課程大綱 安裝 SQL Server 2005 Express Edition RDBMS 基礎概念 測試資料庫簡介 ADO.NET 概述 Connection 物件與 Command 物件 Parameters 集合物件 DataReader 物件 資料繫結 RDBMS 基礎概念 資料庫是指一群彼此相關資料 (Data) 及資訊 (Information) 的集合 關聯式資料庫 (Relational Database) 使用資料表 (Table) 儲存資料 關聯式資料庫管理系統 (RDBMS) 是建立及維護資料庫的軟體, 例如 Microsoft SQL Server 2005 Oracle Database 11g 等 確保資料完整性與安全性
RDBMS 基礎概念 關聯式資料庫管理系統 ( 續 ) 提供系統管理與資料維護介面 支援 SQL 語法資料定義語言 (DDL), 建立資料表及資料欄位的指令集合 資料操縱語言 (DML), 對資料庫中的資料進行資料處理的指令集合, 例如新增 修改 刪除和查詢等操作資料控制語言 (DCL), 設定資料庫的使用權限或安全設定的指令集合 RDBMS 基礎概念 資料表包含欄位 ( 又稱資料行 ) 與資料列 主索引 (Primary Key), 以此欄位的值作為資料表中每一筆記錄的唯一識別 資料表之間使用外部索引 (Foreign Key) 建立關聯, 確保資料完整性 主資料表 關聯資料表及關聯欄位 關聯欄位必須具有相同的資料類型 主資料表的關聯欄位須建立主索引或唯一索引 RDBMS 基礎概念 主資料表 關聯資料表及關聯欄位 ( 續 ) 在關聯資料表的關聯欄位建立外部索引 正規化 (Normalize), 對資料模型進行最佳化處理, 避免資料重複
測試資料庫簡介 Employee: 員工基本資料表 Absent: 員工請假資料表 depart: 部門資料表 實體關聯圖 depart DeptNo DeptName employee EmpNo Name Sex Birthday Height Weight Salary DeptNo absent EmpNo AbsDate AbsType AbsHour ADO.NET 概述 ADO.NET 物件模型的主要組成 資料提供者 (Data Provider) 資料集合 (DataSet) ADO.NET 概述 Provider 封裝特定資料庫的存取細節, 以獲得最佳的執行效能 SQL Provider:System.Data.SqlClient 命名空間, 適用於 SQL Server 7.0 以上的版本 OLEDB Provider:System.Data.OleDb 命名空間, 存取 SQL Server 6.5 或者 MS Access 等 ODBC Provider:System.Data.Odbc 命名空間 Oracle Provider:System.Data.OracleClient 命名空間, 針對 Oracle 資料庫
ADO.NET 概述 使用不同的連線字串和命名空間來存取不同的資料庫, 但不管存取何種資料庫, 使用的 ADO.NET 物件模型都是 " 相同 " 的 Connection 類別 : 提供應用程序與資料來源之間的連線 Command 類別 : 下達欲執行的命令 DataReader 類別 : 從資料來源中取得唯讀且順向的資料 DataAdapter 類別 : 讀取和改變資料來源的資料 ADO.NET 概述 資料庫應用程式的開發程序 使用 Connection 物件開啟資料庫連線 使用 Command 物件執行 SQL 語法, 並取得傳回結果 (DataReader 物件 ) 關閉資料庫連線, 釋放資源 Managed Code ADO.NET Data Provider Database Connection 物件 對於不同的 Data Provider 有不同的 Connection 物件 建立方式 New SqlConnection() New SqlConnection( 連線字串 ) 連線字串, 如何連接資料庫的參數, 伺服器名稱 資料庫名稱 驗證方式和登入帳號與密碼等
Connection 物件 連線字串格式是由資料庫供應商來定義 http://www.connectionstrings.com/ http://www.carlprothman.net/default.aspx?tabid=81 例如存取 MS Access 資料庫的連線字串可以寫成 Provider=Microsoft.Jet.OLEDB.4.0;;Data Source=System.AppDomain.CurrentDomain.BaseDi rectory & "testdb.mdb" Connection 物件 重要成員 Open(): 開啟資料庫連線 ConnectionString: 指定連線字串參數 State:Connection 物件的狀態 (ConnectionState 列舉類型 ) Close(): 關閉資料庫連線 Command 物件 下達欲執行命令 建立方式 New SqlCommand() New SqlCommand(SQL 語法 ) New SqlCommand(SQL 語法, Connection 物件 ) New SqlCommand(SQL 語法, Connection 物件, Transaction 物件 )
Command 物件 重要成員 CommandText: 指定欲執行的 SQL 語法或者預存程序名稱等 CommandTimeOut: 等待資料來源回應的時間 CommandType: 指定命令類型, 包含 Text TableDirect 和 StoreProcedure 等三類 Command 物件 重要成員 ( 續 ) Connection: 指定使用哪一個 Connection 物件來執行命令 Parameters(Collection): 指定執行命令時所需的參數值 CreateParameter: 建立一個新的參數 Transaction: 指定加入哪一個 Transction 物件來執行交易處理 Command 物件 重要成員 ( 續 ) ExecuteNonQuery(): 執行資料異動 (Insert Update Delete), 傳回受影響的記錄筆數 ExecuteScalar(): 執行資料查詢, 傳回結果集合中的第一列第一欄位的單值 (Object 類型 ) ExecuteReader(): 執行資料查詢, 傳回一個 DataReader 物件 在關閉 DataReader 物件之前, 應用程式會一直保持此資料庫連線 ExecuteXmlReader: 執行命令, 傳回一個 XmlReader 物件
使用 SQL 語法存取資料 查詢語法 Select 資料表的欄位名稱或相關的運算式 From 資料表名稱 Where 限制條件或者子查詢 新增語法 Insert Into 資料表名稱 ( 欄位名稱 1, 欄位名稱 2, ) Values ( 欄位值 1, 欄位值 2, ) 若未指定欄位名稱, 則預設以資料表欄位定義的順序, 依序填入欄位值 使用 SQL 語法存取資料 修改語法 Update 資料表名稱 Set 欄位名稱 1= 欄位資料 1, 欄位名稱 2= 欄位資料 2 Where 限制條件或者子查詢 刪除語法 Delete From 資料表名稱 Where 限制條件或者子查詢 Parameters 集合物件 執行參數化查詢 使用步驟 在 SQL 語法或預存程序中指定參數在 OleDBCommand 使用? Select * From Employee Where EmpNo=? 在 SqlCommand 使用 @ Select * From Employee Where EmpNo=@EmpNo 建立對應的參數 New SqlParameter("@EmpNo", SqlDataType.VarChar, 4)
Parameters 集合物件 指定參數值 將參數加入至參數集合中 Add(): 加入新的參數 Clear(): 清除所有參數 Insert(): 插入參數至指定的位置 Remove(): 刪除參數 RemoveAt(): 根據索引值刪除對應的參數 範例 cmd.parameters.add("@empno", SqlDataType.VarChar, 4) cmd.parameters(0)="6508" DataReader 物件 對於不同的 Data Provider 有不同的 DataReader 物件 無建構子, 由 Command 物件的 ExecuteReader 方法建立 DataReader 物件實體 因為一次只讀取一筆記錄, 因此它是 ADO.NET 取得資料最有效率的方法 重要成員 Read(): 讀取下一筆記錄, 若傳回 False, 表示已無資料 提供一系列以 Get 開頭的方法, 用於取出目前紀錄的某個欄位值, 同時需搭配欄位類型, 例如使用 GetString(0) 取得第一個欄位的值, 其欄位類型為字串 資料繫結 (Data Binding) 什麼是資料繫結 使用 ADO.NET 將資料繫結到 Windows 表單的過程 撰寫程式實作資料繫結, 或者使用 VS 2005 可以繫結的物件 資料庫 物件, 任何實作 IEnumarable 介面的類別均可進行資料繫結, 例如 ArrayList
資料繫結 (Data Binding) 資料繫結的類型 簡單資料繫結, 將控制項繫結到單一的欄位值, 例如 Label TextBox CheckBox 等 複雜資料繫結, 將控制項繫結到一個多行多列的記錄集合, 例如 DataGrid ComboBox 等 具有 DataSource 屬性的控制項均可進行資料繫結 下課鐘響, 回家真好