2011-02-02 135 views
4

我有一些遺留的Excel文件萬噸調用存儲過程和數據庫連接的所有舊的方式與記錄集做的......VBA數據層錯誤處理

因爲VBA沒有的try-catch的概念最後,在.NET中有沒有最佳實踐可以應用於更堅實的數據訪問層?我想就如何打開連接,執行一個需要一些參數的存儲過程,然後在任何成功或錯誤的情況下,關閉連接並釋放資源的情況,給出一個很好的例子。

+0

@Charles Williams已經提供了一個很好的答案。這裏有一些鏈接可以幫助我們瞭解Excel中的EH如何工作。簡而言之,它的*語法*與例如.NET,但涉及的概念大多相同。例如,請參閱http://stackoverflow.com/questions/4429965/handling-errors-in-math-functions/4432413#4432413。你也可以做RAII,如在例如C++。請參閱:http://stackoverflow.com/questions/3792134/get-name-of-current-vba-function/3792280#3792280(RAII不直接在.NET中使用,但它背後的概念由IDisposable和'使用'。) – jtolle 2011-02-02 16:42:56

+0

你可以在VBA中模擬一個TRY CATCH塊請看這裏 http://stackoverflow.com/q/30991653/4413676 – HarveyFrench 2015-06-22 23:47:23

回答

4

,我創建了一個.NET託管數據層,並遠銷它作爲COM類,按照這裏的說明:Calling .NET from VBA這樣我必須部署和註冊COM程序集在一起的Excel文件,我承認這有點痛苦,但至少我可以以適當的方式處理數據訪問並使用C#,ADO.NET等等......

7

在VBA中,你必須使用上的錯誤塊:它的凌亂,但我實際上使用了不同的方法現在工作

On Error Goto ConnectionFail 
' open connection 
on Error GoTo 0 
... 
On Error GoTo QueryFail 
' execute querys etc 
on Error goto 0 
... 
Cleanup: 
' close connection destroy objects etc 
Exit Sub 
ConnectionFail 
On Error GoTo 0 
' handle failure 
GoTo Cleanup 
QueryFail 
On Error GoTo 0 
' handle failure 
GoTo Cleanup 
End Sub