標籤:多個 catalog 分組 資料庫 特定 begin 效率 put delete
1. 串連環境簡介
1.1. 串連環境的特點
? 串連環境是指使用者在這種環境下始終保持與資料來源的串連
? 優點
–環境易於實施安全控制
– 同步問題易於控制
? 資料即時性優於其他環境
? 缺點
– 必須保持持續的網路連接
– 擴充性差
1.2. 串連環境下的物件模型
? XxxConnection
– 建立與資料來源的串連,如SqlConnection 用於建立與Microsoft SQLServer? 的串連,OleDbConnection用於建立與任何支援OLEDB 的資料來源的串連
? XxxCommand
– 執行資料來源的命令,如 SqlCommand 可以調用一個 Microsoft SQL Server? 的預存程序,XxxCommand 對象的ExecuteReader 方法可以
返回一個XxxDataReader 對象
? XxxDataReader
– 以唯讀、前向的方式,以流的形式讀取資料,例如SqlDataReader 可以讀取Microsoft SQL Server? 中的資料
– XxxDataReader 由 XxxCommand(通常是SELECT命令)的 ExecuteReader 方法返回
? XxxXmlReader
– 提供以快速的、無緩衝的、前向的方式讀取XML資料
1.3. 串連到資料來源
定義串連
? XxxConnection (如SqlConnection)
? 連接字串是包含資料連線參數的一個字串,用於定義對資料來源的串連
? 連接字串中包含的參數
? 連接字串的重要參數:
– Provider 串連所用的資料提供者的種類
– Data Source 要串連的 SQL Server 的名稱
– Initial Catalog 要串連的資料庫的名稱
– Integrated Security 使用Windows 驗證確定使用者權限
– User ID/Password SQL Server登入名稱稱和密碼
– Persist Security Info 串連後是否傳送安全資訊
1.4. 開啟和關閉串連
? 開啟串連
– XxxConnection.Open()
? 關閉串連
– XxxConnection.Close()
? 退出串連池
– XxxConnection.Dispose()
2. 建立命令
2.1. Command 對象
? Command 對象是一個SQL語句或者預存程序的引用
? Command 對象可以直接被執行
? 屬性
– Name:可選屬性,可以用於引用該對象
– Connection:連線物件的引用,與資料庫互動
– CommandType:Text、StoredProcedure、DirectTable 的一種
– CommandText:SQL 陳述式或者預存程序的名字
– Parameters :可以有零個或多個參數
2.2. Command 對象的重要方法
? ExecuteScalar
–返回一個惟一的值
? ExecuteNonQuery
–用於更新資料庫或改變資料庫結構,返回被影響的行數
? ExecuteReader
–返回資料行的集合
? ExecuteXmlReader (僅限於SqlCommand)
–返回一個 XML 的結果集
3. 返回單個值
3.1. 返回單個值
? 使用ExecuteScalar()方法
? ADO.NET 比 ADO 效率更高,返回整個記錄集
? 樣本
– 一個特定產品的庫存數量
– 有多少個產品
–使用 COUNT、MAX、MIN、AVERAGE
3.2. DEMO
執行返回單個值的Command 命令
4. 返回資料行
? 使用ExecuteReader()方法
–返回一個 DataReader
– 例如: SqlDataReader、OleDbDataReader
? DataReader
– 唯讀、前向,資料行的流
5. 使用 DataReader 擷取資料
? Read 方法
– 得到下一行
– 如果還有後續資料行存在,返回True;反之返回False
? Item 屬性
– aReader[“aColumnName”] 或aReader[columnPosition]
? GetXxx 方法,例如: GetString、 GetInt32
– GetString[ColumnPosition](以基數零開始)
? GetValues 方法
– 一次返回當前行所有的列,高效
? IsDbNull 方法
– 用於測試是否返回NULL
? Close 方法
– Read 方法返回 False 時,應該調用 Close 方法關閉 DataReader,釋放串連
6. 返回多個結果集
? 一個預存程序可能包含多條 SQL 陳述式
–將相關的任務分組
– 封裝商務邏輯
? 如果一個預存程序返回了多個結果集
– 調用NextResult 移到下一個結果集
? 判斷有多少資料行被一個預存程序影響
–使用 RecordsAffected 屬性
7. 不傳回值
? 使用ExecuteNonQuery()方法
? 執行DDL和DCL語句
– CREATE/ALTER/DROP
– GRANT/DENY/REVOKE
? 執行其它DML語句
– INSERT/UPDATE/DELETE
8. Command 命令的參數
? 介紹
– SQL 陳述式和預存程序可以有輸入輸出參數以及傳回值
– Command對象參數用來設定或者返回這些參數
– SqlParameter、OleDbParameter
? ParameterName
– 命令參數的名稱,例如@CatId
? DbTtype
– 串連到資料庫的類型,有 SqlType 和 OleDbType
? Direction
– ParameterDirection 枚舉集指定的值,包括:
? ParameterDirection.Input(輸入)
? ParameterDirection.InputOutput(輸入輸出)
? ParameterDirection.Output(輸出)
? ParameterDirection.ReturnValue(傳回值)
9. 事務
? 事務是一系列相互關聯的任務,作為一個整體成功提交或者失敗(提交或者復原)
? ACID
– Atomicity (原子):事務或者全部提交,或者全不提交
– Consistency(一致):事務保證了資料的完整性
– Isolation(分離):交易處理了資料操作的並發性
– Durability(持續):即使在事務結束後發生系統崩潰等災難性情況,事務涉及的資料操作也將正常儲存
9.2. 使用 T-SQL 實現事務
? SQL事務語句
– BEGIN TRAN、COMMIT TRAN、ROLLBACK TRAN
? 程式碼範例
BEGIN TRANDECLARE @orderDetailsError int, @productError intDELETE FROM "Order Details" WHERE ProductID=42SELECT @orderDetailsError = @@ERRORDELETE FROM Products WHERE ProductID=42SELECT @productError = @@ERRORIF @orderDetailsError = 0 AND @productError = 0COMMIT TRANELSEROLLBACK TRAN
9.3. 使用 ADO.NET 管理事務
? XxxConnection – 例如SqlConnection
– BeginTransaction
? XxxTransaction – 例如SqlTransaction
– Commit
– Rollback
? 隔離等級
ADO.NET 串連方式進行資料訪問