版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
ADO.NET數(shù)據(jù)訪問技術(shù)從架構(gòu)原理到實戰(zhàn)應(yīng)用的完整技術(shù)指南Contents課程目錄系統(tǒng)掌握ADO.NET數(shù)據(jù)訪問技術(shù),從基礎(chǔ)架構(gòu)到高級實戰(zhàn)01ADO.NET概述與發(fā)展歷程02核心架構(gòu)與組件解析03數(shù)據(jù)提供程序詳解04DataSet離線數(shù)據(jù)模型05數(shù)據(jù)操作與開發(fā)實戰(zhàn)06高級特性與最佳實踐CHAPTER01ADO.NET概述與發(fā)展歷程從ActiveXDataObjects到.NET平臺的數(shù)據(jù)訪問基石Overview什么是ADO.NETADO.NET是.NETFramework中優(yōu)先使用的數(shù)據(jù)訪問接口,它并非傳統(tǒng)ADO的簡單升級,而是為托管代碼環(huán)境全新設(shè)計的組件庫,位于System.Data命名空間下,為開發(fā)者提供一致的、面向多種數(shù)據(jù)源的訪問能力。.NETFramework技術(shù)生態(tài)全新設(shè)計—名稱源自ActiveXDataObjects,但ADO.NET是為.NET編程環(huán)境全新設(shè)計的數(shù)據(jù)訪問接口,而非ADO的版本迭代。它徹底重構(gòu)了數(shù)據(jù)訪問模型,以更好地適應(yīng)托管代碼的安全性和性能要求。深度整合—核心類庫位于System.Data.dll,與System.Xml.dll中的XML類深度整合,支持關(guān)系型與XML數(shù)據(jù)統(tǒng)一處理。這種設(shè)計使開發(fā)者能夠無縫地在表格數(shù)據(jù)和層次化數(shù)據(jù)之間進(jìn)行轉(zhuǎn)換。托管優(yōu)先—為托管代碼開發(fā)人員提供類似ADO給COM開發(fā)者的功能,但架構(gòu)完全不同,推薦在.NET應(yīng)用中優(yōu)先使用。ADO.NET充分利用了CLR的垃圾回收、類型安全和異常處理機(jī)制。多源一致—支持SQLServer、Oracle、OLEDB、ODBC公開數(shù)據(jù)源以及XML數(shù)據(jù)的一致訪問。通過提供統(tǒng)一的編程模型,開發(fā)者可以使用相同的模式訪問不同的后端數(shù)據(jù)存儲。EVOLUTION·DATAACCESS從ADO到ADO.NET的演進(jìn)Web應(yīng)用的興起徹底改變了數(shù)據(jù)訪問的需求模式,微軟由此催生了離線數(shù)據(jù)模型的設(shè)計理念,這成為ADO.NET區(qū)別于ADO的最核心特征。01Web爆發(fā)暴露ADO瓶頸:1998年Web應(yīng)用爆發(fā)式增長,連接保持(Server-sidecursor)和Recordset.Open持續(xù)占用數(shù)據(jù)庫資源,無法適應(yīng)高并發(fā)場景02離線數(shù)據(jù)模型誕生:在客戶端創(chuàng)建"小型數(shù)據(jù)庫",取回數(shù)據(jù)后即可斷開連接,大幅減少數(shù)據(jù)庫資源占用03核心對象設(shè)計改良:引入連接池和批量操作機(jī)制,解決ADO中數(shù)據(jù)庫連線和資源耗用的嚴(yán)重問題04正式納入.NET平臺:2000年ADO+更名為ADO.NET,包裝到.NETFramework類庫,成為.NET平臺唯一數(shù)據(jù)存取組件05XML深度集成:數(shù)據(jù)可在DataSet中以XML格式序列化、傳輸和反序列化,天然支持分布式數(shù)據(jù)交換COREFEATURESADO.NET核心功能特性ADO.NET的功能設(shè)計圍繞"一致性訪問"和"組件化架構(gòu)"兩大原則展開,通過數(shù)據(jù)提供程序和DataSet雙引擎,同時滿足連接式和離線式兩種數(shù)據(jù)訪問模式。UNIFIEDAPI一致的數(shù)據(jù)源訪問通過統(tǒng)一API存取SQLServer、Oracle、XML及OLEDB、ODBC公開的各種數(shù)據(jù)源,降低多數(shù)據(jù)源場景下的開發(fā)復(fù)雜度,實現(xiàn)跨平臺數(shù)據(jù)訪問的標(biāo)準(zhǔn)化接口設(shè)計。SQLServerOracleXMLMODULAR組件化離散設(shè)計數(shù)據(jù)訪問元件可分開使用也可串聯(lián)組合,開發(fā)者可根據(jù)場景靈活選擇連接式DataReader或離線式DataSet,實現(xiàn)按需加載的彈性架構(gòu)模式。DataReaderDataSetPROVIDER數(shù)據(jù)提供程序機(jī)制.NETFramework數(shù)據(jù)提供程序?qū)iT負(fù)責(zé)連接數(shù)據(jù)庫、執(zhí)行SQL命令和擷取結(jié)果,職責(zé)清晰且高度可優(yōu)化,支持連接池管理與性能調(diào)優(yōu)。ConnectionCommandOFFLINEDataSet離線處理查詢結(jié)果可放入DataSet對象中,支持臨時方式公開給使用者、多源數(shù)據(jù)合并、以及在各應(yīng)用層之間傳遞,實現(xiàn)真正的斷開式數(shù)據(jù)操作。DataTableDataRelationChapter02核心架構(gòu)與組件解析數(shù)據(jù)提供程序與DataSet雙引擎架構(gòu)的設(shè)計哲學(xué)ArchitectureOverviewADO.NET雙引擎架構(gòu)總覽ADO.NET的架構(gòu)由.NETFramework數(shù)據(jù)提供程序和DataSet兩大核心組件構(gòu)成。數(shù)據(jù)提供程序負(fù)責(zé)高效的連接式數(shù)據(jù)訪問,DataSet負(fù)責(zé)靈活的離線數(shù)據(jù)管理,SqlDataAdapter作為兩者之間的橋梁。.NETFramework數(shù)據(jù)提供程序01連接式數(shù)據(jù)訪問引擎,負(fù)責(zé)建立和維護(hù)與數(shù)據(jù)庫的物理連接,執(zhí)行SQL命令并以流式方式返回結(jié)果02核心對象包括Connection(連接)、Command(命令)、DataReader(只進(jìn)只讀讀取器)、DataAdapter(適配器)03高性能、低內(nèi)存占用,適合大數(shù)據(jù)量讀取和實時性要求高的場景,但需要保持?jǐn)?shù)據(jù)庫連接Connection·Command·DataReader·DataAdapterDataSet離線數(shù)據(jù)模型01內(nèi)存中的關(guān)系型數(shù)據(jù)庫,包含DataTable、DataColumn、DataRow、DataRelation等對象,模擬完整的數(shù)據(jù)庫結(jié)構(gòu)02不依賴特定數(shù)據(jù)源,可獨立管理本地數(shù)據(jù)或XML數(shù)據(jù),也可通過DataAdapter從數(shù)據(jù)庫填充03支持離線操作、數(shù)據(jù)緩存、多源合并和XML序列化,適合多層架構(gòu)中的數(shù)據(jù)傳遞和復(fù)雜業(yè)務(wù)邏輯DataTable·DataColumn·DataRow·DataRelationADO.NET·CoreObjects數(shù)據(jù)提供程序四大核心對象.NETFramework數(shù)據(jù)提供程序由四個職責(zé)分明的核心對象組成:Connection管理連接生命周期,Command封裝SQL指令,DataReader提供高性能流式讀取,DataAdapter橋接在線與離線世界。理解這四者的分工是高效使用ADO.NET的基礎(chǔ)。Connection連接對象管理與特定數(shù)據(jù)源的連接會話,包含連接字符串(服務(wù)器地址、數(shù)據(jù)庫名、認(rèn)證信息等)每種數(shù)據(jù)庫有專用實現(xiàn):SqlConnection、OracleConnection、OleDbConnection等SqlConnection·OracleConnectionCommand命令對象封裝SQL語句或存儲過程,支持參數(shù)化查詢以防止SQL注入攻擊三種執(zhí)行方式:ExecuteReader、ExecuteNonQuery、ExecuteScalarReader·NonQuery·ScalarDataReader讀取器只進(jìn)只讀的高性能數(shù)據(jù)流,內(nèi)存占用極低,適合遍歷大量結(jié)果集必須在連接打開狀態(tài)下使用,讀取完畢后需及時關(guān)閉以釋放資源Forward-Only·Read-OnlyDataAdapter適配器橋接數(shù)據(jù)提供程序與DataSet:Fill()填充數(shù)據(jù),Update()寫回數(shù)據(jù)庫內(nèi)部封裝Select、Insert、Update、Delete四套命令對象Fill()·Update()INTERNALSTRUCTUREDataSet內(nèi)部結(jié)構(gòu)解析DataSet本質(zhì)上是一個內(nèi)存中的關(guān)系型數(shù)據(jù)庫,它通過DataTable、DataColumn、DataRow和DataRelation等對象的層次化組合,在脫離數(shù)據(jù)庫連接的情況下完整模擬了數(shù)據(jù)庫的表結(jié)構(gòu)、字段定義、數(shù)據(jù)行和表間關(guān)系,支持離線狀態(tài)下的復(fù)雜數(shù)據(jù)操作。DataTableCollectionDataSet包含多個DataTable,每個DataTable代表一張數(shù)據(jù)表,通過Tables屬性索引訪問。支持動態(tài)添加、刪除表對象,實現(xiàn)內(nèi)存數(shù)據(jù)庫的靈活構(gòu)建。TABLESDataColumn與DataRow每個DataTable由列集合定義結(jié)構(gòu),由行集合存儲數(shù)據(jù),類似數(shù)據(jù)庫的Schema與Record。列定義數(shù)據(jù)類型、約束條件,行承載實際業(yè)務(wù)數(shù)據(jù)。SCHEMADataRelation關(guān)系可在不同DataTable之間建立父子關(guān)系,模擬外鍵關(guān)聯(lián),支持級聯(lián)查詢和數(shù)據(jù)導(dǎo)航。通過Relations屬性管理多表間的邏輯連接。RELATION約束機(jī)制支持UniqueConstraint和ForeignKeyConstraint,保證內(nèi)存數(shù)據(jù)的完整性和一致性。主鍵唯一性約束與級聯(lián)更新刪除規(guī)則確保數(shù)據(jù)質(zhì)量。CONSTRAINTSDataView視圖為DataTable提供可定制的過濾、排序視圖,同一張表可創(chuàng)建多個DataView展示不同數(shù)據(jù)子集。支持動態(tài)條件篩選與多字段排序。DATAVIEWDATAACCESSPATTERNS連接式vs離線式數(shù)據(jù)訪問模式ADO.NET同時提供連接式和離線式兩種數(shù)據(jù)訪問模式,分別由DataReader和DataSet承載,選擇取決于業(yè)務(wù)場景的綜合要求。連接式DataReader數(shù)據(jù)以只進(jìn)只讀流的方式逐行返回,內(nèi)存中僅保留當(dāng)前行,適合處理百萬級大數(shù)據(jù)量的快速遍歷全程保持?jǐn)?shù)據(jù)庫連接,讀取完畢后必須立即關(guān)閉Connection,否則會導(dǎo)致連接泄漏典型場景:列表頁數(shù)據(jù)展示、報表導(dǎo)出、數(shù)據(jù)遷移ETL任務(wù)等只讀高吞吐需求高吞吐·只讀流式離線式DataSet數(shù)據(jù)一次性加載到內(nèi)存后斷開連接,支持在本地進(jìn)行增刪改查、多表關(guān)聯(lián)、排序過濾等復(fù)雜操作支持XML序列化,可在網(wǎng)絡(luò)層間傳遞,是多層架構(gòu)中數(shù)據(jù)傳輸?shù)睦硐胼d體典型場景:數(shù)據(jù)編輯表單、多步驟向?qū)А㈦x線數(shù)據(jù)同步、跨服務(wù)數(shù)據(jù)傳遞等離線緩存·多層架構(gòu)CHAPTER03數(shù)據(jù)提供程序詳解Connection、Command、DataReader、DataAdapter的深度解析ADO.NET·DataAccessConnection對象與連接池機(jī)制依賴連接池實現(xiàn)高性能連接復(fù)用,using語句確保連接及時歸還是避免資源泄漏的關(guān)鍵實踐。連接字符串核心參數(shù)包括Server(服務(wù)器地址)、Database(數(shù)據(jù)庫名)、IntegratedSecurity(Windows認(rèn)證)或UserID/Password(SQL認(rèn)證),以及連接池配置參數(shù)。Server·Database連接池共享機(jī)制連接池默認(rèn)啟用,池大小上限默認(rèn)100;連接字符串完全相同時共享同一個池,字符串中任何字符差異都會創(chuàng)建新池。Max100資源釋放與歸還必須使用using語句或顯式調(diào)用Close()/Dispose()確保連接歸還池中,未關(guān)閉的連接會持續(xù)占用池資源直至超時回收。using()連接池配置參數(shù)MinPoolSize(最小連接數(shù))、MaxPoolSize(最大連接數(shù))、ConnectionTimeout(連接超時秒數(shù))、ConnectionLifetime(最大存活時間)。PoolSize·TimeoutEXECUTIONMETHODSCommand對象與三種執(zhí)行方式SqlCommand對象通過CommandText和CommandType屬性封裝數(shù)據(jù)庫操作指令,并提供三種針對性的執(zhí)行方法,參數(shù)化查詢是安全使用的核心實踐。三種執(zhí)行方式ExecuteReader()SqlDataReader返回SqlDataReader對象,用于SELECT查詢獲取多行結(jié)果集,支持流式逐行讀取ExecuteNonQuery()intaffected返回int類型受影響行數(shù),用于INSERT/UPDATE/DELETE和DDL語句,不返回結(jié)果集ExecuteScalar()objectsingle返回object類型單值結(jié)果,適用于COUNT()、SUM()、MAX()等聚合查詢,僅取第一行第一列參數(shù)化查詢實踐@參數(shù)占位符AddWithValue使用@參數(shù)替代字符串拼接,通過Parameters.AddWithValue()傳值,如WHEREId=@UserId預(yù)編譯與校驗Anti-Injection數(shù)據(jù)庫引擎進(jìn)行預(yù)編譯和類型校驗,從根本上阻斷SQL注入攻擊路徑,同時提升查詢計劃復(fù)用率ADO.NET·DataAccessDataReader高性能流式讀取SqlDataReader是ADO.NET中性能最優(yōu)的數(shù)據(jù)讀取組件,采用只進(jìn)只讀流式設(shè)計,內(nèi)存中僅緩存當(dāng)前一行數(shù)據(jù),是大數(shù)據(jù)量只讀場景的首選方案。數(shù)據(jù)庫服務(wù)器運行環(huán)境—數(shù)據(jù)訪問的底層物理基礎(chǔ)設(shè)施只進(jìn)只讀模式:通過Read()方法逐行向前滾動,不支持后退、隨機(jī)訪問或數(shù)據(jù)修改,極簡設(shè)計保證了最高讀取性能資源管理要點:DataReader獨占Connection,使用期間連接無法執(zhí)行其他操作;讀取完畢后必須調(diào)用Close(),推薦using語句字段訪問方式:按索引或列名訪問,強(qiáng)類型方法如GetString()、GetInt32()可避免裝箱拆箱開銷MARS多活動結(jié)果集:SQLServer支持單個連接同時打開多個DataReader,需設(shè)置MultipleActiveResultSets=TrueCOREMECHANISMDataAdapter橋接在線與離線SqlDataAdapter是在線與離線數(shù)據(jù)訪問的核心橋梁。Fill()將查詢結(jié)果填充到離線DataSet并自動管理連接,Update()根據(jù)RowState將更改同步寫回數(shù)據(jù)庫,實現(xiàn)無縫銜接。Fill()填充數(shù)據(jù)自動管理連接生命周期——打開連接、執(zhí)行查詢、填充DataTable后自動關(guān)閉,開發(fā)者無需手動干預(yù)連接狀態(tài)。支持填充多個DataTable,可通過重載方法指定起始行與最大行數(shù),實現(xiàn)分頁加載以控制內(nèi)存占用。自動連接管理Update()同步更改遍歷DataRow的RowState(Added/Modified/Deleted),自動調(diào)用對應(yīng)的Insert/Update/Delete命令。配合SqlCommandBuilder自動生成四套SQL命令,減少手動編寫工作量,復(fù)雜場景仍需手動配置。RowState驅(qū)動CHAPTER04DataSet離線數(shù)據(jù)模型內(nèi)存中的關(guān)系型數(shù)據(jù)庫:結(jié)構(gòu)、狀態(tài)與XML集成CORESTRUCTUREDataTable結(jié)構(gòu)與數(shù)據(jù)操作DataTable是DataSet的核心組成單元,通過DataColumn定義表結(jié)構(gòu)、DataRow管理數(shù)據(jù)行、PrimaryKey設(shè)定主鍵約束,完整模擬了數(shù)據(jù)庫表的Schema和數(shù)據(jù)存儲能力。SchemaDataColumn列結(jié)構(gòu)設(shè)置ColumnName、DataType、AllowDBNull與DefaultValue,定義列的數(shù)據(jù)約束與默認(rèn)值規(guī)則ColumnNameDataTypeCRUDDataRow數(shù)據(jù)操作NewRow()創(chuàng)建行,Rows.Add()插入數(shù)據(jù),支持通過索引、列名或DataColumn對象靈活訪問字段值NewRow()Rows.Add()Find()PrimaryKey主鍵設(shè)定DataColumn數(shù)組為主鍵,啟用Find()快速查找特定行,支持DataAdapter自動更新同步PrimaryKeyFind()AutoExpression表達(dá)式自動計算派生值如UnitPrice×Quantity,無需手動維護(hù)計算邏輯,支持聚合函數(shù)與條件表達(dá)式ExpressionComputedDataRowLifecycleDataRow狀態(tài)跟蹤與版本管理DataRow通過RowState屬性實時跟蹤每行數(shù)據(jù)的生命周期狀態(tài),通過RowVersion維護(hù)多版本數(shù)據(jù)值,是DataAdapter.Update()自動識別更改并同步到數(shù)據(jù)庫的核心基礎(chǔ)。LIFECYCLERowState行狀態(tài)五種狀態(tài)完整生命周期:Detached(新建未加入)→Added(加入表中)→Unchanged(AcceptChanges后)→Modified(修改后)→Deleted(刪除后)AcceptChanges()將所有行狀態(tài)重置為Unchanged,RejectChanges()撤銷所有更改并恢復(fù)原始值,是批量提交或回滾的核心方法5StatesVERSIONINGRowVersion行版本Current保存當(dāng)前值、Original保存初始加載值、Proposed保存BeginEdit()后的編輯值,三個版本同時存在支持精確變更對比樂觀并發(fā)控制:UPDATE語句的WHERE條件同時匹配Original值,若數(shù)據(jù)庫中數(shù)據(jù)已被其他用戶修改則更新失敗,避免覆蓋沖突3VersionsADO.NET·DataSetDataRelation與XML集成DataRelation使DataSet能夠在多個DataTable之間建立父子關(guān)系,實現(xiàn)類似數(shù)據(jù)庫外鍵的數(shù)據(jù)導(dǎo)航能力;而XML集成能力讓DataSet可以無縫序列化/反序列化,成為分布式系統(tǒng)和WebService中理想的數(shù)據(jù)傳輸載體。DataRelation表間關(guān)系RELATION通過父列和子列建立關(guān)系:newDataRelation('OrderDetails',ordersTable.Columns['OrderId'],detailsTable.Columns['OrderId']),定義主鍵與外鍵的映射規(guī)則,實現(xiàn)表間邏輯關(guān)聯(lián)。NAVIGATION父行GetChildRows()獲取關(guān)聯(lián)子行,子行GetParentRow()回溯父行,支持級聯(lián)查詢與雙向數(shù)據(jù)導(dǎo)航,簡化復(fù)雜數(shù)據(jù)遍歷邏輯。CONSTRAINT配合ForeignKeyConstraint自動實現(xiàn)級聯(lián)刪除和級聯(lián)更新,保持主子表數(shù)據(jù)一致性,維護(hù)引用完整性約束。XML集成能力SERIALIZEGetXml()/WriteXml()將整個DataSet(結(jié)構(gòu)+數(shù)據(jù))序列化為XML,ReadXml()/ReadXmlSchema()從XML恢復(fù),支持跨平臺數(shù)據(jù)交換與持久化存儲,實現(xiàn)離線數(shù)據(jù)緩存與網(wǎng)絡(luò)傳輸?shù)臒o縫銜接。DUALVIEWXmlDataDocument允許以XMLDOM方式操作DataSet數(shù)據(jù),同時保持關(guān)系型視圖和XML視圖的雙向同步,開發(fā)者可靈活選擇XPath查詢或關(guān)系型訪問模式,適應(yīng)不同場景的數(shù)據(jù)處理需求。CHAPTER05數(shù)據(jù)操作與開發(fā)實戰(zhàn)從連接管理到事務(wù)處理的完整開發(fā)實踐DataAccessLifecycle標(biāo)準(zhǔn)數(shù)據(jù)查詢流程與資源管理ADO.NET數(shù)據(jù)查詢的標(biāo)準(zhǔn)流程遵循'創(chuàng)建連接→打開連接→執(zhí)行命令→讀取結(jié)果→釋放資源'的生命周期,其中using語句是資源管理的核心保障。01連接創(chuàng)建與配置通過newSqlConnection(connectionString)實例化連接對象,連接字符串從配置文件ConnectionStrings節(jié)讀取,避免硬編碼02using語句資源管理using語句確保IDisposable對象在作用域結(jié)束時自動調(diào)用Dispose(),等價于try-finally中的Close()03命令執(zhí)行與參數(shù)綁定創(chuàng)建SqlCommand并通過Parameters.AddWithValue()綁定參數(shù),防止SQL注入并提升查詢計劃復(fù)用率04DataReader流式讀取調(diào)用ExecuteReader()獲取數(shù)據(jù)流,用while(reader.Read())逐行訪問,通過索引器獲取字段值A(chǔ)DO.NET·DataManipulation數(shù)據(jù)增刪改操作實踐INSERT/UPDATE/DELETE操作統(tǒng)一使用ExecuteNonQuery()方法執(zhí)行,返回值表示受影響的行數(shù)。安全實踐的核心是:始終使用參數(shù)化查詢防止SQL注入、檢查返回值驗證操作是否成功、在關(guān)鍵操作前確認(rèn)數(shù)據(jù)范圍。SECTION01INSERT插入數(shù)據(jù)INSERTINTOUsers(Name,Email)VALUES(@Name,@Email)參數(shù)化INSERT語句—使用INSERTINTOUsers(Name,Email)VALUES(@Name,@Email),通過Parameters集合綁定值SELECTSCOPE_IDENTITY()獲取自增主鍵—在INSERT語句后追加SELECTSCOPE_IDENTITY(),用ExecuteScalar()獲取新插入行的自增ID值ExecuteScalar()SECTION02UPDATE與DELETE精確WHERE條件—UPDATE操作需精確WHERE條件并檢查返回值:若ExecuteNonQuery()返回0表示未找到匹配行,可能是數(shù)據(jù)已被并發(fā)修改或刪除UPDATESETIsDeleted=1軟刪除策略—使用UPDATESETIsDeleted=1替代物理DELETE,保留審計痕跡并支持?jǐn)?shù)據(jù)恢復(fù)IsDeleted=1Transaction&Consistency事務(wù)處理與數(shù)據(jù)一致性SqlTransaction為ADO.NET提供數(shù)據(jù)庫事務(wù)支持,確保操作全部成功(Commit)或全部撤銷(Rollback),滿足ACID原子性要求。01BeginTransaction調(diào)用conn.BeginTransaction()開啟事務(wù),可指定IsolationLevel(默認(rèn)為ReadCommitted)。事務(wù)開始后,后續(xù)所有數(shù)據(jù)庫操作都將被納入該事務(wù)的管理范圍,直到顯式提交或回滾。02BindCommand每個SqlCommand必須設(shè)置cmd.Transaction=trans,否則命令不受事務(wù)保護(hù)。未綁定事務(wù)的命令將獨立執(zhí)行,無法參與統(tǒng)一的原子性保證,可能導(dǎo)致數(shù)據(jù)不一致。03Commit/Rollbacktry塊成功后調(diào)用trans.Commit()永久保存更改;catch塊中調(diào)用trans.Rollback()撤銷所有未提交操作,確保數(shù)據(jù)庫狀態(tài)回滾到事務(wù)開始前的一致性快照。04Savepoint通過trans.Save()設(shè)置回滾標(biāo)記點,支持部分回滾到指定保存點。適用于復(fù)雜多步驟事務(wù)場景,允許在特定檢查點恢復(fù)而非全部撤銷,提升事務(wù)處理的靈活性與容錯能力。StoredProcedure存儲過程調(diào)用與參數(shù)處理存儲過程通過預(yù)編譯和參數(shù)化機(jī)制提供了性能、安全性和邏輯封裝的三重優(yōu)勢。ADO.NET中調(diào)用存儲過程需將CommandType設(shè)為StoredProcedure,并通過ParameterDirection精確配置四種參數(shù)類型,實現(xiàn)與數(shù)據(jù)庫端邏輯的完整交互。調(diào)用配置命令類型設(shè)置設(shè)置cmd.CommandType=StoredProcedure,cmd.CommandText指定存儲過程名稱,然后按序添加參數(shù)。通過明確的命令類型標(biāo)識,ADO.NET能夠識別并優(yōu)化存儲過程的執(zhí)行路徑。核心優(yōu)勢預(yù)編譯執(zhí)行計劃復(fù)用提升性能,參數(shù)化查詢防止注入保障安全,業(yè)務(wù)邏輯集中管理增強(qiáng)可維護(hù)性。存儲過程將數(shù)據(jù)操作邏輯封裝在數(shù)據(jù)庫層,減少網(wǎng)絡(luò)傳輸并統(tǒng)一業(yè)務(wù)規(guī)則。參數(shù)類型處理Input參數(shù)默認(rèn)方向,通過Value屬性傳入值,用于向存儲過程傳遞查詢條件、更新數(shù)據(jù)等輸入信息。Output參數(shù)需指定Size和DbType,執(zhí)行后通過Value屬性讀取結(jié)果,適用于獲取計算結(jié)果或標(biāo)識值。ReturnValue參數(shù)獲取存儲過程中RETURN語句的整數(shù)值,常用于返回狀態(tài)碼、錯誤碼或影響行數(shù)等執(zhí)行狀態(tài)信息。BATCHOPERATIONS批量數(shù)據(jù)操作與性能優(yōu)化面對大批量數(shù)據(jù)場景,ADO.NET提供SqlBulkCopy和DataAdapter批量更新兩種高效方案,分別適用于數(shù)據(jù)遷移和批量編輯。SqlBulkCopy極速導(dǎo)入秒級百萬行導(dǎo)入基于SQLServer的BCP協(xié)議,繞過常規(guī)INSERT流程直接寫入數(shù)據(jù)頁,百萬行導(dǎo)入僅需數(shù)秒,性能提升數(shù)十倍WriteToServer核心調(diào)用newSqlBulkCopy(conn)→設(shè)置DestinationTableName→可選ColumnMappings→WriteToServer(dataTable)完成批量寫入DataAdapter批量更新100條/批減少網(wǎng)絡(luò)開銷設(shè)置UpdateBatchSize=100,每次數(shù)據(jù)庫往返提交100條更改,大幅減少網(wǎng)絡(luò)往返次數(shù),顯著提升更新效率RowError容錯機(jī)制配合ContinueUpdateOnError=true可在遇到單行錯誤時繼續(xù)處理后續(xù)行,通過RowError屬性記錄失敗原因,確保批量更新健壯性Chapter06高級特性與最佳實踐LINQ集成、異步操作、安全防護(hù)與性能調(diào)優(yōu).NETDATAACCESSLINQtoDataSet與EntityFrameworkLINQtoDataSet通過AsEnumerable()提供強(qiáng)類型查詢能力,EF則是構(gòu)建在ADO.NET之上的ORM框架,代表了.NET數(shù)據(jù)訪問技術(shù)的演進(jìn)方向。LINQtoDataSet通過dataTable.AsEnumerable()將DataTable轉(zhuǎn)換為IEnumerable<DataRow>,即可使用LINQ語法進(jìn)行Where、OrderBy、GroupBy等查詢操作支持強(qiáng)類型字段訪問:row.Field<string>("Name")替代row["Name"].ToString(),編譯期類型檢查減少運行時錯誤適用于遺留系統(tǒng)遷移場景,在不改變原有DataSet架構(gòu)的前提下,逐步引入LINQ查詢能力提升代碼可維護(hù)性EntityFramework(EF)EF是ADO.NET之上的ORM框架,通過概念模型而非底層存儲模型操作數(shù)據(jù),開發(fā)者使用C#實體類而非SQL語句底層仍依賴ADO.NET數(shù)據(jù)提供程序執(zhí)行SQL,但提供了LINQtoEntities、變更跟蹤、遷移管理等高級功能,適合復(fù)雜業(yè)務(wù)系統(tǒng)支持CodeFirst、DatabaseFirst和ModelFirst三種開發(fā)模式,靈活適應(yīng)不同項目的數(shù)據(jù)庫設(shè)計需求AsyncPattern異步數(shù)據(jù)訪問模式ADO.NET的異步API配合C#async/await語法,實現(xiàn)不阻塞線程的非阻塞式數(shù)據(jù)訪問,顯著提升服務(wù)器吞吐量與UI響應(yīng)性。異步連接與執(zhí)行awaitconn.OpenAsync()異步打開連接,ExecuteReaderAsync()異步獲取DataReader,避免線程阻塞等待數(shù)據(jù)庫響應(yīng)OpenAsyn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 痛風(fēng)與高尿酸血癥護(hù)理查房
- Lab2土壤細(xì)菌的分離與純化
- labview信號發(fā)生器及其電壓表實驗
- FF現(xiàn)場總線技術(shù)在棗莊SES應(yīng)用
- ICU患者的心理護(hù)理
- 公司拓展新員工的轉(zhuǎn)正總結(jié)
- Internet技術(shù)及其應(yīng)用教程陳耀溪第三章
- java基礎(chǔ)理論知識串講
- 2026蘇教二上6的乘法口訣教案
- 中班飲食健康教案
- 2026國家消防招錄面試題及答案
- 公立醫(yī)院行政管理崗招聘考試核心考點筆記:公立醫(yī)院績效考核與等級評審
- 2026年6月證券從業(yè)資格考試《證券市場基礎(chǔ)知識》考試真題及答案詳解
- 2026年新疆維吾爾自治區(qū)中考英語試卷(含答案)
- 四川大學(xué)2026年強(qiáng)基計劃筆試模擬試題及答案解析
- 3植物媽媽有辦法 課件(共32張)
- 神經(jīng)科護(hù)理進(jìn)修成果展示
- 水利數(shù)據(jù)分類分級規(guī)則(2026 版)
- QC/T 1253-2025汽車用耐熱雙頭螺柱
- 成本實操-藥廠成本核算方案
- 驛站安全生產(chǎn)管理制度
評論
0/150
提交評論