Ado.net #1
Dotblogs 的標籤: ADO.NET
看了黃忠成老師的極意之道 次世代.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
連接步驟:
- 根據要連接的資料庫,選擇適合的連接物件(Data Provider)
- 建立連接物件
- 填寫連接字串屬性(ConnectionString)
- 開啟連接
- 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
- Command透過Connetion去連接資料庫來取得資料,然後將處理的結果,存放於DataReader物件中.
- CommandBehavior列舉行別,執行ExecuteReader()方法時,提供預期的動作行為
- 連線模式以DataReader物件為主
- http://msdn.microsoft.com/zh-tw/library/haa3afyz.aspx
- DataReader是forward-only,步進式,拋棄前一筆資料,可透過CommandBehavior的SequentialAccess設定來讀取大型二進制(BLOB)
4.DataAdapter
常用的方法
方法 |
說明 |
Fill | 將實體資料來源的紀錄填入資料集 |
FillSchema | 在資料即加入資料表的結構,同時該結構必須符合實體資料表的結構 |
5.Transcation
- http://msdn.microsoft.com/zh-tw/library/777e5ebh.aspx
- StartTransaction型別,ex1
- TransactionScope,ex2
- 手動控制Commit和Rollback,使用CommittableTransaction類別,http://msdn.microsoft.com/zh-tw/library/ms172146(VS.80).aspx
- TransactionScope,當有兩個資料庫連線的時,會啟動DTC(分散式交易),而DTC在執行效率上較差
ex1:
ex2:
SqlTransaction trans=conn.BeginTransaction();
//將建立的Transaction物件,給Command物件,之後SQL指令都會在這個交易執行
cmd.Transaction=trans;
using (TransactionScope t=new TranscationScope())
{
//在此處開啟連線,以及要操作的程式碼
//如未呼叫Commit函式,則在TransactionScope物件的Dispose函式被呼叫,會自動還原資料
}