掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
本系列課程我們將會(huì)從Ado Connection 發(fā)布的各個(gè)角度出來(lái),來(lái)講述Ado Connection 發(fā)布以后的全新功能,這主要包括C#3.0,VB9.0,WCF,WPF,WP,LINQ,AJAX,mobile開(kāi)發(fā),Cardspace,智能客戶端。

我們首先知道 activex dll是一個(gè)類庫(kù) 最典型的是 ado msxml 等等 這些類庫(kù)是功能相對(duì)單一的庫(kù) 作為程序進(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)程處理后傳回來(lái)數(shù)據(jù)。Ado Connection所以這種方式叫做進(jìn)程外組件 又叫做ole 自動(dòng)化服務(wù)器。#t#
這是一種功能非常大的程序常用的方式 比如word excel 等 我們可能只需要我們的進(jìn)程有他們一小部分功能 開(kāi)啟了一小部分接口的引用 但是在這個(gè)主進(jìn)程外的引用進(jìn)程中 可能整套的office都在協(xié)同工作。你現(xiàn)在的問(wèn)題就出在你嘗試進(jìn)程間傳遞一個(gè)Ado Connection這是一個(gè)帶有連接狀態(tài)的敏感對(duì)象這在activex exe進(jìn)程間傳遞是非常危險(xiǎn)且消耗巨大 而被禁止的。
但是在activex dll 傳遞 是在同一個(gè)進(jìn)程中就絕對(duì)沒(méi)問(wèn)題。所以 建議傳遞 CONNECTION STRING的值類型 而不是一個(gè)具有狀態(tài)的對(duì)象或者 把主程序的 和activex exe的公用邏輯部分 做成一公共的 activex dll 分別由兩個(gè)工程飲用它。
如果使用調(diào)用ADO.NET是必需的,那么如果程序結(jié)構(gòu)導(dǎo)致我無(wú)法使用using(){}來(lái)包裹我的Ado Connection,比如說(shuō)我的Connection是同一個(gè)help類返回的,那我又怎么辦呢?
這是一個(gè)經(jīng)常遇到的問(wèn)題。在這樣的環(huán)境中,我們無(wú)法將整個(gè)connection包裹在一個(gè)connection中。解決這樣的方法有兩個(gè),一個(gè)就是修改您的代碼結(jié)構(gòu)。傳入一個(gè)ConnectionString來(lái)返回調(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)了。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流