一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

ADO.NET的小訣竅

時(shí)間:2024-07-06 23:57:28 ADO 我要投稿
  • 相關(guān)推薦

ADO.NET的實(shí)用小訣竅

  要想充分發(fā)揮ADO.NET的優(yōu)勢,不僅需要全面、深入理解ADO.NET編程模型,及時(shí)總結經(jīng)驗、技巧也十分重要。ADO已經(jīng)有多年的實(shí)踐經(jīng)驗,ADO.NET以此為基礎,提供了更加豐富、強大的工具;盡管如此,ADO.NET的設計目標畢竟不是提供一個(gè)即插即用的工具,它不會(huì )把所有的編程工作簡(jiǎn)化到僅靠鼠標點(diǎn)擊就可以完成的程度。

  ADO.NET包含了一大堆代表數據訪(fǎng)問(wèn)模型中各種邏輯實(shí)體的對象,其中尤以連接、事務(wù)這兩個(gè)對象最為重要。連接的作用是建立一個(gè)與后端數據庫通信的通道,創(chuàng )建連接對象必須以特定的.NET數據提供者為基礎。事務(wù)對象可以在已有的連接對象上創(chuàng )建,也可以通過(guò)顯式地執行一個(gè)BEGINTRANSQL語(yǔ)句創(chuàng )建。雖然理論很簡(jiǎn)單,但實(shí)際上,圍繞連接、事務(wù)的不確定因素很多,而且它們對應用整體的穩定性和效率有著(zhù)至關(guān)緊要的影響。

  如何保存連接字符串,保護連接字符串中可能包含的敏感信息(例如密碼)?怎樣設計一個(gè)完善的數據訪(fǎng)問(wèn)策略,既考慮到安全性(即身份驗證、授權),卻又不至于對性能和可伸縮性造成太大的影響?如果需要用到事務(wù),那么如何高效地實(shí)現和控制事務(wù)?采用自動(dòng)事務(wù)還是手動(dòng)事務(wù)?在使用ADO.NET時(shí),這些問(wèn)題都必須仔細考慮。

  一、連接字符串,連接池

  數據庫連接是一種重要的、有限的、開(kāi)銷(xiāo)昂貴的資源,因此用好連接對象是任何應用的最基本的要求。使用數據庫連接的要點(diǎn)可總結如下:

  保存連接字符串應注意安全。

  打開(kāi)連接應遲,關(guān)閉連接應早。

  連接字符串是訪(fǎng)問(wèn)數據庫的鑰匙。連接字符串除了說(shuō)明要訪(fǎng)問(wèn)的數據之外,還包含了用戶(hù)為什么可以訪(fǎng)問(wèn)那些數據的身份證明。在執行數據庫操作時(shí),用戶(hù)身份證明是確定數據訪(fǎng)問(wèn)權限的最重要的因素。

  1.1保存連接字符串

  目前,硬編碼的連接字符串具有最好的性能,因為它們直接編譯進(jìn)了應用的代碼之中。然而,硬編碼的字符串影響程序的靈活性,一旦連接字符串改變,應用程序必須重新編譯。

  將連接字符串保存到外部提高了靈活性,代價(jià)是訪(fǎng)問(wèn)外部字符串需要付出額外的開(kāi)銷(xiāo)。但在絕大多數情況下,由此導致的性能開(kāi)銷(xiāo)可以忽略不計,真正需要擔心的是安全問(wèn)題。例如,攻擊者可能修改、竊取連接字符串。將連接字符串保存到外部環(huán)境的常見(jiàn)途徑有:配置文件,UDL文件,Windows注冊表。

  .NET框架配置文件以純文本文件的形式部署,訪(fǎng)問(wèn)方便。如果連接字符串包含密碼,文本格式將是最大的缺陷所在,因為密碼將以明文的形式保存?梢钥紤]引入一個(gè)專(zhuān)用的加密/解密引擎,不過(guò)這部分工作需要開(kāi)發(fā)者自己完成。

  UDL文件是供OLEDB提供者使用的文本文件,也就是說(shuō),SQLServer托管提供者不支持UDL文件。UDL文件也存在和前面的配置文件一樣的安全問(wèn)題,總地看來(lái)優(yōu)勢不多。

  最后,Windows注冊表可以作為一個(gè)天然安全的存儲場(chǎng)所。注冊表是一個(gè)保存關(guān)鍵信息的系統知識庫,如果結合運用加密技術(shù),可以達到較高的安全性。使用注冊表的主要缺點(diǎn)是部署麻煩,要求創(chuàng )建注冊鍵(可能還要執行加密)以及從注冊表讀取數據。雖然.NETFramework提供了一組調用底層Win32API的封裝類(lèi),但這些類(lèi)都沒(méi)有提供加密功能。aspnet_setreg.exe工具可以用來(lái)創(chuàng )建HKEY_LOCAL_MACHINE下的注冊鍵保存用戶(hù)名稱(chēng)和密碼,例如:aspnet_setreg.exe-k"SoftwareMyData"-u:userID-p:password。該命令將加密指定的用戶(hù)ID和密碼。

  1.2連接池原理

  連接池允許我們通過(guò)一個(gè)緩沖池重用現有的連接對象,避免每次使用連接對象時(shí)都要新建一個(gè)對象。采用連接池之后,只要少量的連接對象就可以滿(mǎn)足大量客戶(hù)端的需要。

  每一個(gè)連接池都與一個(gè)獨立的連接字符串及其事務(wù)上下文關(guān)聯(lián)。每次打開(kāi)一個(gè)新的連接,數據提供者會(huì )嘗試將指定的連接字符串與連接池的字符串進(jìn)行匹配。如果匹配失敗,數據提供者創(chuàng )建一個(gè)新的連接并將它加入連接池。連接池被創(chuàng )建之后,除非進(jìn)程結束,否則不會(huì )被拆除。有人認為這種處理方式會(huì )影響性能,其實(shí)不然,維護一個(gè)不活動(dòng)的或者空的連接池不需要多少開(kāi)銷(xiāo)。

  連接池創(chuàng )建之后,系統會(huì )創(chuàng )建一些連接對象并將它們加入連接池,直至達到額定的最小連接對象數量。以后,系統會(huì )根據需要新建和加入連接對象,一直到達最大連接對象數量限額為止。如果程序請求一個(gè)連接對象時(shí)沒(méi)有空閑的連接對象可用,且連接池里面的對象數量已達到上限,則請求被放入隊列,一旦有連接被釋放回緩沖池就立即取出使用。

  避免用編程的方式構造連接字符串。如果通過(guò)合并多個(gè)輸入數據的方式構造出連接字符串,很容易給注入式攻擊以可乘之機。如果必須用到用戶(hù)輸入的數據,務(wù)必進(jìn)行嚴格的驗證。

  1.3關(guān)閉連接

  關(guān)閉一個(gè)連接時(shí),連接對象被返回給連接池以便重用,但這時(shí)實(shí)際的數據庫連接并未被拆除。如果禁用了連接池,則實(shí)際的數據庫連接也被關(guān)閉。這里必須強調的一點(diǎn)時(shí),連接對象使用完畢后應當顯式關(guān)閉并將它返回給連接池,不要依靠垃圾收集器來(lái)釋放連接。實(shí)際上,當連接對象的引用超出有效范圍時(shí),連接不一定被關(guān)閉——垃圾收集器的功能是拆除代表物理連接的.NET封裝對象,但這并不意味著(zhù)底層的連接也被關(guān)閉了。

  調用Close或Dispose方法可以將連接釋放回連接池。只有當生存期結束或出現嚴重錯誤時(shí),連接對象才會(huì )被從連接池刪除。

  1.4連接池與安全

  如果一個(gè)應用程序的所有數據訪(fǎng)問(wèn)操作都使用同樣的連接字符串,連接池的優(yōu)勢將發(fā)揮到極限。但是,這只是一種理想化了的狀況,很可能與應用程序的其他要求存在沖突。例如,如果只使用一個(gè)連接字符串,要在數據庫這一層次上執行安全控制就很困難了。

  另一方面,如果讓每一個(gè)用戶(hù)分別使用自己的連接字符串(即為每一個(gè)用戶(hù)分別設定數據庫帳戶(hù)),勢必出現大量小型的連接池,許多連接根本不會(huì )被重用。依照慣例,這類(lèi)問(wèn)題的最佳解決方案是尋找兩個(gè)極端之間的一個(gè)適當折衷點(diǎn)。我們可以設置一組具有代表性的公用帳戶(hù),同時(shí)修改存儲過(guò)程,使之接受一個(gè)表示用戶(hù)標識的參數,存儲過(guò)程根據傳入的用戶(hù)標識執行不同的操作。

  二、事務(wù)模式

  分布式企業(yè)應用離不開(kāi)事務(wù)。在數據訪(fǎng)問(wèn)代碼中加入事務(wù)管理功能主要有兩種方式:手動(dòng)方式,自動(dòng)方式。

  在手動(dòng)方式中,程序員負責編寫(xiě)所有配置、使用事務(wù)機制的代碼。自動(dòng)(或COM+)事務(wù)則在.NET類(lèi)中加入聲明式屬性,指定運行時(shí)對象的事務(wù)特性。自動(dòng)方式方便了將多個(gè)組件配制成在同一個(gè)事務(wù)之內運行。兩種事務(wù)方式都支持本地的或分布式的事務(wù),但自動(dòng)的事務(wù)方式極大地簡(jiǎn)化了分布式事務(wù)處理。

  必須注意的是,事務(wù)是一種開(kāi)銷(xiāo)很大的操作,所以決定使用事務(wù)之前務(wù)必再三考慮。如果確實(shí)需要使用事務(wù),那就要盡量縮小事務(wù)的粒度,減少對數據庫的加鎖時(shí)間、加鎖范圍。例如,對于SQLServer,單個(gè)的SQL語(yǔ)句不需要顯式地聲明事務(wù),SQLServer會(huì )自動(dòng)將每一個(gè)語(yǔ)句作為一個(gè)獨立的事務(wù)運行。手動(dòng)的本地事務(wù)總是比其他事務(wù)快得多,因為它不需要涉及DTC(DistributedTransactionCoordinator)。

  手動(dòng)事務(wù)、自動(dòng)事務(wù)應當視為兩種不同的、互斥的技術(shù)。如果要在單個(gè)數據庫上執行事務(wù)性操作,優(yōu)先考慮手動(dòng)事務(wù)。當單個(gè)事務(wù)跨越多個(gè)遠程數據庫,或單個(gè)事務(wù)涉及多個(gè)資源管理器(例如,一個(gè)數據庫和一個(gè)MSMQ資源管理器),優(yōu)先考慮自動(dòng)事務(wù)。不管怎樣,應當極力避免混合運用兩種事務(wù)模式。如果性能不是特別重要,即使只對一個(gè)數據庫操作也可以考慮使用自動(dòng)事務(wù),使代碼更加簡(jiǎn)潔(但速度略慢)。

  總而言之,要提高數據庫訪(fǎng)問(wèn)代碼的質(zhì)量,必須深入了解ADO.NET對象模型,根據實(shí)際情況靈活運用各種技巧。ADO.NET是一個(gè)公用的API,各種應用——不管是Windows窗體應用、ASP頁(yè)面還是Web服務(wù),都可以通過(guò)ADO.NET訪(fǎng)問(wèn)數據庫;但是,ADO.NET不是一邊接受輸入、一邊吐出結果的黑箱,而是一個(gè)由許多工具組成的工具箱。

【ADO.NET的小訣竅】相關(guān)文章:

高效處理公文的小訣竅09-21

學(xué)習肚皮舞的小訣竅07-18

細談日本留學(xué)面試的小訣竅04-22

有關(guān)ADO與ADO.NET的區別與介紹09-15

十個(gè)簡(jiǎn)單護發(fā)小訣竅07-30

2017年藝考形體小訣竅09-01

數控機床日常保養小訣竅10-14

畫(huà)眉的訣竅推薦10-28

導游景點(diǎn)講解訣竅09-21

高效處理公文的訣竅04-11

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看