2011-02-02 81 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