中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      ADO.NET的小訣竅

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

      ADO.NET的實用小訣竅

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

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

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

        一、連接字符串,連接池

        數(shù)據(jù)庫連接是一種重要的、有限的、開銷昂貴的資源,因此用好連接對象是任何應(yīng)用的最基本的要求。使用數(shù)據(jù)庫連接的要點可總結(jié)如下:

        保存連接字符串應(yīng)注意安全。

        打開連接應(yīng)遲,關(guān)閉連接應(yīng)早。

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

        1.1保存連接字符串

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

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

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

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

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

        1.2連接池原理

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

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

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

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

        1.3關(guān)閉連接

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

        調(diào)用Close或Dispose方法可以將連接釋放回連接池。只有當(dāng)生存期結(jié)束或出現(xiàn)嚴(yán)重錯誤時,連接對象才會被從連接池刪除。

        1.4連接池與安全

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

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

        二、事務(wù)模式

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

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

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

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

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

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

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

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

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

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

      十個簡單護(hù)發(fā)小訣竅07-30

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

      數(shù)控機(jī)床日常保養(yǎng)小訣竅10-14

      畫眉的訣竅推薦10-28

      導(dǎo)游景點講解訣竅09-21

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

      主站蜘蛛池模板: 99久久精品国产一区二区暴力| 亚欧视频无码在线观看| 亚洲精品国产老熟女久久| 日本精品人妻在线观看| 青青草原亚洲在线视频| 真人在线射美女视频在线观看| 仲巴县| 国产黄色精品高潮播放| 国产av中出一区二区| 中文字幕成人精品久久不卡| 抚松县| 温州市| 六安市| 文安县| 永久免费不卡在线观看黄网站| 延川县| 富民县| 休宁县| 高清| 日本色偷偷| 中文字幕一区二区三区久久蜜桃| 石渠县| 梁平县| 讷河市| 日本一区二区三区激情视频| 伊川县| 天津市| 青青草综合影院在线观看| 69av视频在线| 无码国产精品一区二区免费式芒果| 91久久国产福利自产拍| 蜜桃av观看亚洲一区二区| 经典女同一区二区三区| 久久精品黄色免费热线| 538在线视频| 国产后入内射在线观看| 国产360激情盗摄一区在线观看| 精品黑人一区二区三区| 亚洲一区二区在线视频播放| 亚洲一区日本一区二区| 国产大片中文字幕|