2012-11-05 64 views
0

在我的工作,我們的大多數數據都是圍繞着一個ODBC數據源 - 然而,我們有數以百計的污染與成千上萬ADODB連接& Recordset對象的顯式實例的VBA宏(所有連接通過相同的DSN)。連接特定數據庫讀取器類

有相當多的,我想重構這就是目前的形式代碼:

Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 

cn.Open "MYDSN" 
SQL = "SELECT * FROM [...]" 
rs.Open SQL, cn 

' utilize rs ... 

rs.Close 
cn.Close 
Set rs = Nothing 
Set cn = Nothing 

我想象一個可重用的類的DLL,可能寫在C#.NET,將提供一個簡單的界面,可以更簡潔地完成上述任務。

我的問題是,你會如何着手設計這一類?我對C#相當陌生,但希望避免爲下一個人留下相同的混亂。

在此先感謝!

+0

如果是工作,你怎麼看爲優勢,以你的僱主? – Fionnuala

+0

而是使用這些應用程序的每臺計算機上更改ODBC DSN的,我們可以在一個地方更改數據庫連接信息。 – dru

+0

這對於那些決定不需要本地IT和開發人員(至少少數幾個)來管理標準的公司來說,必定很常見。我在同一條船上。我們在VBA宏上運行我們的操作並殺死了我。 VBA可以很好而且強大,但是它的學習曲線非常溫和,以至於大多數VBA浮動都是宏觀記錄和論壇複製粘貼。源是可訪問的方式。那麼,除了點頭和對你的困境表示同情之外,我沒有任何建設性的建議。 – Bmo

回答

1

應用良好的舊KISS原則 - 創建一個靜態方法CreateRecordset(string SQL),它從配置中讀取DSN,打開連接並返回給定SQL的記錄集對象。

+0

我不建議做任何有做與數據訪問靜態如果你有一大堆的源同時調用它。除非你自己添加某種連接管理,否則會導致做一些非常糟糕的煙花爆竹。 – tmesser

+0

靜態方法每次都會創建一個新連接。不重用單個靜態實例。 –

+0

我和@Knagis在這一張上。你將會爭取ADO.Net來讓它像這樣工作,彙集連接,垃圾收集等等。添加一個VBA方法來返回一個記錄集。 –