ADO.NET 觀念

在撰寫 ADO.NET 時,有些會運到的基本物件類別,來幫助在資料庫連接時的

橋接口。

以下為一些在我們使用 ADO.NET 時的物件類別:

(資料來源參考:https://zh.wikipedia.org/wiki/ADO.NET)

ADO.NET由連線資料來源(connected data source)以及離線資料模型(disconnected data model)兩個部份構成,這兩個部份是相輔相成的。

連線資料來源便是用來連接資料庫(或是具有OLE DB資料來源提供者)的物件類別,由下列介面構成:

IDbConnection,負責與資料庫的連線管理,包含連線字串(connection string),連線的開關,資料庫交易的啟始與連線錯誤的處理,所有的ADO.NET資料提供者都要實作此介面。

  • Open()/Close():開啟與關閉資料庫連線。
  • BeginTransaction():啟動資料庫交易,並回傳一個IDbTransaction物件,以控制交易的結果

IDbCommand,負責執行資料庫指令(在大多數的案例中都是SQL指令),並傳回由資料庫中擷取的結果集,或是執行不回傳結果集的資料庫指令。

  • ExecuteNonQuery():執行不回傳結果集的資料庫指令,像是INSERTUPDATEDELETE指令,返回值為該命令所影響的行數。 對於其他所有類型的語句,返回值 為 -1。
  • ExecuteScalar():執行指令並回傳第一列第一行中的值(object類型)。當沒有資料時,ExcuteScalar方法返回System.DBNull。
  • ExecuteReader():執行指令並回傳IDataReader物件,以讀取資料集中的資料。
  • BeginExecuteNonQuery:開始執行異步查詢
  • EndExecuteNonQuery: 結束執行異步查詢

IDataParameter,負責裝載資料庫指令所需要的參數資料,在使用參數化查詢時會經常使用。 對於不同的資料來源來說,預留位置不同。SQLServer資料來源用@parametername格式來命名參數,OleDb以及Odbc資料來源均用問號(?)來標識參數位置,而Oracle則以:parmname格式使用命名參數。

IDbTransaction,負責裝載資料庫交易所需的控制物件,以執行交易的認可(commit)或撤銷(rollback)的工作。

  • Commit():認可資料庫交易。
  • Rollback():撤銷資料庫交易。

IDbDataAdapter,負責將來自於IDbCommand執行取得的結果集,裝載到離線型資料集(DataSet)或是離線型資料表(DataTable)中。

  • Fill():將資料填入離線型資料物件。
  • Update():將變更過的離線型資料物件中的資料寫回資料庫。

IDataReader,建立一個只可向前讀取游標(forward-only)的資料讀取器工具,以逐列讀取方式存取資料,IDbDataAdapter內部也是由它來讀取資料。

  • Read():第一次呼叫Read()方法取得第一行資料,並將游標指向下一行資料。當再次呼叫該方法時候,將讀取下一行資料。當檢測到不再有資料行時,Read()方法將返回false

IDataRecord,在IDataReader讀取資料後實際裝載資料列的物件,提供方法來讀取資料行中的資料,以及轉換成.NET Framework原生型別的工具。

  • GetOrdinal():取得指定資料行的欄位索引值。
  • IsDBNull():判斷指定欄位的資料是否為NULL值

使用連線資料來源需要由開發人員自我管理連線,並且直接操作資料存取的相關細節,但它的優點是速度快,而且可以自訂整個資料存取流程的邏輯。

 

對每種Data Provider,ADO.NET要實作下述物件結構:

  • Connection 物件提供與資料來源的連線。
  • Command物件使您能夠存取用於返回資料、修改資料、執行儲存過程以及傳送或檢索參數資訊的資料庫命令。
  • DataReader 物件從資料來源中提供快速的,唯讀的資料流。
  • DataAdapter 物件提供連線 DataSet 物件和資料來源的橋樑。DataAdapter 使用 Command 物件在資料來源中執行 SQL 命令,以便將資料載入到 DataSet 中,並使對 DataSet 中資料的更改與資料來源保持一致。
  • Parameter 物件用於參數化查詢。
  • ConnectionStringBuilder:提供一種用於建立和管理由 Connection 物件使用的連線字串的內容的簡單方法。 所有 ConnectionStringBuilder 物件的基礎類別均為 DbConnectionStringBuilder 類。
  • CommandBuilder :自動生成 DataAdapter 的命令內容或從儲存過程中衍生參數資訊,並填充 Command 物件的 Parameters 集合。 所有 CommandBuilder 物件的基礎類別均為 DbCommandBuilder 類。