Ado.net #1

Ado.net #1

Dotblogs 的標籤:

看了黃忠成老師的極意之道 次世代.NET Framwork 3.5資料庫開發聖典 ASP.NET篇,以及陳惟彬老師的ADO.net 3.x 資料庫程式設計參考手冊,以上好書

做的筆記.

 

.Net Data Provider

 

每一種.NET Data Provider 都有四個元件構成,如下表

 

Connection 連線到資料庫
Command 對資料來源執行命令,並擷取DataReader or DataSet,
或對資料來源執行 INSERT, UPDATE, DELETE 命令
DataReader 單向,唯讀的連線結果集(resultset)
DataAdapter 將取自資料來源的資料植入DataSet中,並更新資料來源
Transaction 交易,應用程式於在異動資料前可以建立一個Transaction,
待所有異動都成功後,呼叫Commit來確定交易成功,將交易真正得寫入資料庫.當異動期間發生錯誤時,應用程式呼叫Rollback來放棄所有異動,還原至起始交易前的狀態.

 

1.Connection

   連接步驟:

  1. 根據要連接的資料庫,選擇適合的連接物件(Data Provider)
  2. 建立連接物件
  3. 填寫連接字串屬性(ConnectionString)
  4. 開啟連接
  5. http://msdn.microsoft.com/zh-tw/library/ms254507.aspx

 

   Data Provider 

資料庫

Provider

Microsoft SQL Server Provider=SQLOLEDB
Oracle Provider=MSDAORA
Microsoft Access 2003,Execl 2003 Provider=Microsoft.Jet.OLEDB.4.0
Microsoft Access 2007,Execl 2007 Provider=Microsoft.ACE.OLEDB.12.0
IBM DB2 Provider=DB2OLEDB

 

#可利用using 指令來確保Connection.Close被呼叫

ex:


using (conn)
{
   ......
}

 

2.Command

 

   DbCommand 物件常用的方法

方法

說明

Cancel 試著去取消DbCommand物件的執行
ExecuteDbDataReader 執行SQL敘述,傳回一個DbDataReader物件
ExecuteNonQuery 針對執行的SQL敘述,傳回受影響的紀錄
ExecuteReader 使用SELECT 命令來傳回一個結果集,這個結果集會以DataReader物件來存放
ExecuteScalar 當回傳的結果僅有第一個資料列的第一個資料行是我們要的資料,就可使用此方法
Prepare 要求資料庫預先編譯要執行的SQL敘述

 

  動態參數

  Ex:

 


SqlCommand cmd=new SqlCommand();
//建立SQL敘述
cmd.CommandText="UPDATE Product SET ProductName=@ProductName";
//使用Add方法加入參數,並設定資料型態
cmd.Parameters.Add("@ProductID",SqlDbType.Char);
//指定動態參數的值
cmd.Parameters["@ProductID"].Value=Convert.ToString(txtProductID.Text);

"@",為SQL Data Provider用的參數前導詞

# http://msdn.microsoft.com/zh-tw/library/ms254953(VS.80).aspx

3.DataReader

  1. Command透過Connetion去連接資料庫來取得資料,然後將處理的結果,存放於DataReader物件中.
  2. CommandBehavior列舉行別,執行ExecuteReader()方法時,提供預期的動作行為
  3. 連線模式以DataReader物件為主
  4. http://msdn.microsoft.com/zh-tw/library/haa3afyz.aspx
  5. DataReader是forward-only,步進式,拋棄前一筆資料,可透過CommandBehavior的SequentialAccess設定來讀取大型二進制(BLOB)

 

 

4.DataAdapter

 

 

常用的方法

方法

說明

Fill 將實體資料來源的紀錄填入資料集
FillSchema 在資料即加入資料表的結構,同時該結構必須符合實體資料表的結構

 

5.Transcation

 

  1. http://msdn.microsoft.com/zh-tw/library/777e5ebh.aspx
  2. StartTransaction型別,ex1
  3. TransactionScope,ex2
  4. 手動控制Commit和Rollback,使用CommittableTransaction類別,http://msdn.microsoft.com/zh-tw/library/ms172146(VS.80).aspx
  5. TransactionScope,當有兩個資料庫連線的時,會啟動DTC(分散式交易),而DTC在執行效率上較差

ex1:

 

ex2:


SqlTransaction trans=conn.BeginTransaction();
//將建立的Transaction物件,給Command物件,之後SQL指令都會在這個交易執行
cmd.Transaction=trans;

using (TransactionScope t=new TranscationScope())
{
    //在此處開啟連線,以及要操作的程式碼
   //如未呼叫Commit函式,則在TransactionScope物件的Dispose函式被呼叫,會自動還原資料

}