資源描述:
《深入ADO.NET開(kāi)發(fā)—高級(jí)數(shù)據(jù)訪問(wèn)技術(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、深入ADO.NET開(kāi)發(fā)—高級(jí)數(shù)據(jù)訪問(wèn)技術(shù)微軟特邀開(kāi)發(fā)專家基礎(chǔ)預(yù)習(xí)熟悉MicrosoftADO.NET了解WebServices基礎(chǔ)開(kāi)發(fā)熟悉.NET文件集操作LEVEL400議題并發(fā)連接池事務(wù)可抽取的數(shù)據(jù)訪問(wèn)層并發(fā)性問(wèn)題在可斷開(kāi)連接架構(gòu)中必須要面對(duì)并發(fā)問(wèn)題當(dāng)兩個(gè)(或多個(gè))用戶獲取并修改相同的記錄,然后試圖同時(shí)維持各自的修改時(shí),將會(huì)發(fā)生沖突:臟讀,不可重復(fù)讀,虛幻讀當(dāng)提交多個(gè)更新的時(shí)候,會(huì)造成部分更新無(wú)法正確完成悲觀與樂(lè)觀(ADO.NET構(gòu)建)并發(fā)鎖ADO.NET中對(duì)并發(fā)性問(wèn)題的處理與DataAdapter對(duì)象相連接的DataSet對(duì)象
2、使用樂(lè)觀鎖來(lái)處理記錄內(nèi)容沖突如果使用用戶存儲(chǔ)過(guò)程來(lái)替代表操作的話,并發(fā)問(wèn)題的處理還需要一些額外的工作DataAdapter配置向?qū)軌騽?chuàng)建存儲(chǔ)過(guò)程來(lái)處理這個(gè)問(wèn)題當(dāng)ContinueUpdateOnError為false(缺省值)時(shí),在發(fā)生第一個(gè)沖突的時(shí)候會(huì)拋出DBConcurrencyException異常捕獲該異常并且通知用戶,或者處理該異?;蛱崾居脩粝乱徊叫枰龀瞿男┻x擇并發(fā):在.NET中使用樂(lè)觀鎖的處理步驟DataSetchanges=myDataSet.GetChanges();try{mySqlDataAdapter.Upd
3、ate(changes);myDataSet.Merge(changes);}catch(DBConcurrencyExceptione){//通知用戶記錄從上次更新到現(xiàn)在已經(jīng)發(fā)生過(guò)變化,放棄更新}finally...更高級(jí)的操作模型DataSetchanges=myDataSet.GetChanges();try{mySqlDataAdapter.ContinueOnError=true;mySqlDataAdapter.Update(changes);if(changes.HasErrors){//獲取錯(cuò)誤DataRow[]co
4、llisions=changes.Tables[0].GetErrors();//處理錯(cuò)誤}演示一處理并發(fā)性問(wèn)題連接池連接池可以極大地提升性能和可擴(kuò)展性避免由創(chuàng)建連接所帶來(lái)的大量消耗通過(guò)在連接字符串中添加以下屬性來(lái)調(diào)節(jié)連接池:Pooling=true;MaxPoolSize=5;MinPoolSize=3;上面的字符串將打開(kāi)連接池,并且確保在連接池中至少存在著3個(gè)連接,并且最多為5個(gè)連接當(dāng)達(dá)到最大連接時(shí),打開(kāi)新鏈接的請(qǐng)求將排隊(duì)一段可配置的時(shí)間。注意鏈接是通過(guò)對(duì)鏈接字符串精確匹配的法則被池化的。池化機(jī)制對(duì)名稱-值對(duì)間的空格敏感。例如,
5、下面的兩個(gè)鏈接字符串將生成單獨(dú)的池,因?yàn)榈诙€(gè)字符串包含了一個(gè)額外的空字符。"IntegratedSecurity=SSPI;Database=Northwind""IntegratedSecurity=SSPI;Database=Northwind"演示二連接池事務(wù)ACID原則:原子性,一致性,隔離性,持久性事務(wù)行為要么完成所有動(dòng)作,要么不做任何動(dòng)作同時(shí)提交或者回滾所有的修改不是所有的SQL語(yǔ)句都允許出現(xiàn)在事務(wù)中ADO.NET事務(wù)只能應(yīng)用于單一鏈接中SqlTransaction對(duì)象從SqlConnection.BeginTrans
6、action()方法中返回SqlTransaction類SqlTransactiontrans=conn.BeginTransaction();隔離級(jí)別枚舉(IsolationLevel):ReadCommitted,ReadUncommitted,RepeatableRead,Serializable,UnspecifiedSerializable是最高級(jí)別的隔離//處理工作Insert,Update,Delete//要么提交所有的修改trans.Commit();//要么如果發(fā)生錯(cuò)誤,撤回所有的修改trans.RollBack(
7、);隔離級(jí)別隔離級(jí)別臟讀不可重復(fù)讀虛幻讀ReadUncommitted是是是ReadCommitted否是是RepeatableRead否否是Serializable否否否Serializable提供了最高的隔離級(jí)別,但卻只有最低的執(zhí)行效率演示三本地事務(wù)操作高級(jí)事務(wù)為了執(zhí)行跨數(shù)據(jù)庫(kù)事務(wù),需要通過(guò)System.EnterpriseServices向分布式事務(wù)協(xié)調(diào)器(DTC)注冊(cè)鏈接在中間層Web服務(wù)上添加:System.EnterpriseServices.Transaction屬性TransactionOption枚舉:Disabl
8、ed,NotSupported,Required,RequiresNew,SupportedTransactionIsolationLevel枚舉:ReadCommitted,ReadUnCommitted,RepeatableRea