包含Ado Connection注意相關(guān)技巧
本系列課程我們將會(huì)從Ado Connection 發(fā)布的各個(gè)角度出來,來講述Ado Connection 發(fā)布以后的全新功能,這主要包括C#3.0,VB9.0,WCF,WPF,WP,LINQ,AJAX,mobile開發(fā),Cardspace,智能客戶端。
我們首先知道 activex dll是一個(gè)類庫 最典型的是 ado msxml 等等 這些類庫是功能相對單一的庫 作為程序進(jìn)程的一部分 Ado Connection 在主exe運(yùn)行的時(shí)候 就加載在主程序中的.被稱為進(jìn)程內(nèi)組件。
但是activex exe不太一樣 它是在調(diào)用組件的時(shí)候 創(chuàng)建一個(gè)新進(jìn)程 主程序調(diào)用接口,然后由進(jìn)程外的服務(wù)進(jìn)程處理后傳回來數(shù)據(jù)。Ado Connection所以這種方式叫做進(jìn)程外組件 又叫做ole 自動(dòng)化服務(wù)器。#t#
這是一種功能非常大的程序常用的方式 比如word excel 等 我們可能只需要我們的進(jìn)程有他們一小部分功能 開啟了一小部分接口的引用 但是在這個(gè)主進(jìn)程外的引用進(jìn)程中 可能整套的office都在協(xié)同工作。你現(xiàn)在的問題就出在你嘗試進(jìn)程間傳遞一個(gè)Ado Connection這是一個(gè)帶有連接狀態(tài)的敏感對象這在activex exe進(jìn)程間傳遞是非常危險(xiǎn)且消耗巨大 而被禁止的。
但是在activex dll 傳遞 是在同一個(gè)進(jìn)程中就絕對沒問題。所以 建議傳遞 CONNECTION STRING的值類型 而不是一個(gè)具有狀態(tài)的對象或者 把主程序的 和activex exe的公用邏輯部分 做成一公共的 activex dll 分別由兩個(gè)工程飲用它。
如果使用調(diào)用ADO.NET是必需的,那么如果程序結(jié)構(gòu)導(dǎo)致我無法使用using(){}來包裹我的Ado Connection,比如說我的Connection是同一個(gè)help類返回的,那我又怎么辦呢?
這是一個(gè)經(jīng)常遇到的問題。在這樣的環(huán)境中,我們無法將整個(gè)connection包裹在一個(gè)connection中。解決這樣的方法有兩個(gè),一個(gè)就是修改您的代碼結(jié)構(gòu)。傳入一個(gè)ConnectionString來返回調(diào)用ADO Connection 。另一個(gè)方法就是反復(fù)檢查您的代碼,是否及時(shí)關(guān)閉了Connection。
因?yàn)镃lose的效果與dispose是相同的。但是如果不使用using(){}這個(gè)及時(shí)關(guān)閉Connection的任務(wù)就等于是交到了我們自己的手上,而不再由.net framework為我們把關(guān)了。