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