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