關(guān)于使用ADO.NET編程連接池講解
ADO.NET經(jīng)過長時(shí)間的發(fā)展,很多用戶都很了解ADO.NET編程了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。要想充分發(fā)揮ADO.NET的優(yōu)勢,不僅需要全面、深入理解ADO.net編程模型,及時(shí)總結(jié)經(jīng)驗(yàn)、技巧也十分重要。ADO已經(jīng)有多年的實(shí)踐經(jīng)驗(yàn),ADO.NET以此為基礎(chǔ),提供了更加豐富、強(qiáng)大的工具;盡管如此,ADO.NET的設(shè)計(jì)目標(biāo)畢竟不是提供一個(gè)即插即用的工具,它不會(huì)把所有的編程工作簡化到僅靠鼠標(biāo)點(diǎn)擊就可以完成的程度。
#T#ADO.NET編程包含了一大堆代表數(shù)據(jù)訪問模型中各種邏輯實(shí)體的對象,其中尤以連接、事務(wù)這兩個(gè)對象最為重要。連接的作用是建立一個(gè)與后端數(shù)據(jù)庫通信的通道,創(chuàng)建連接對象必須以特定的.NET數(shù)據(jù)提供者為基礎(chǔ)。事務(wù)對象可以在已有的連接對象上創(chuàng)建,也可以通過顯式地執(zhí)行一個(gè)BEGIN TRAN SQL語句創(chuàng)建。雖然理論很簡單,但實(shí)際上,圍繞連接、事務(wù)的不確定因素很多,而且它們對應(yīng)用整體的穩(wěn)定性和效率有著至關(guān)緊要的影響。
如何保存連接字符串,保護(hù)連接字符串中可能包含的敏感信息(例如密碼)?怎樣設(shè)計(jì)一個(gè)完善的數(shù)據(jù)訪問策略,既考慮到安全性(即身份驗(yàn)證、授權(quán)),卻又不至于對性能和可伸縮性造成太大的影響?如果需要用到事務(wù),那么如何高效地實(shí)現(xiàn)和控制事務(wù)?采用自動(dòng)事務(wù)還是手動(dòng)事務(wù)?在使用ADO.NET時(shí),這些問題都必須仔細(xì)考慮。
連接字符串,連接池
數(shù)據(jù)庫連接是一種重要的、有限的、開銷昂貴的資源,因此用好連接對象是任何應(yīng)用的最基本的要求。使用數(shù)據(jù)庫連接的要點(diǎn)可總結(jié)如下:
◆保存連接字符串應(yīng)注意安全。
◆打開連接應(yīng)遲,關(guān)閉連接應(yīng)早。
連接字符串是訪問數(shù)據(jù)庫的鑰匙。連接字符串除了說明要訪問的數(shù)據(jù)之外,還包含了用戶為什么可以訪問那些數(shù)據(jù)的身份證明。在執(zhí)行數(shù)據(jù)庫操作時(shí),用戶身份證明是確定數(shù)據(jù)訪問權(quán)限的最重要的因素。
保存連接字符串
目前,硬編碼的連接字符串具有最好的性能,因?yàn)樗鼈冎苯泳幾g進(jìn)了應(yīng)用的代碼之中。然而,硬編碼的字符串影響程序的靈活性,一旦連接字符串改變,應(yīng)用程序必須重新編譯。將連接字符串保存到外部提高了靈活性,代價(jià)是訪問外部字符串需要付出額外的開銷。但在絕大多數(shù)情況下,由此導(dǎo)致的性能開銷可以忽略不計(jì),真正需要擔(dān)心的是安全問題。例如,攻擊者可能修改、竊取連接字符串。將連接字符串保存到外部環(huán)境的常見途徑有:配置文件,UDL文件,Windows注冊表。
.NET框架配置文件以純文本文件的形式部署,訪問方便。如果連接字符串包含密碼,文本格式將是最大的缺陷所在,因?yàn)槊艽a將以明文的形式保存??梢钥紤]引入一個(gè)專用的加密/解密引擎,不過這部分工作需要開發(fā)者自己完成。