我们有一个 .NET 应用程序 (VB / VS2010) 并在 SQL Server 2008 上调用许多存储过程以进行数据库查询。我们还有很多更新/插入/删除触发器,一旦这些存储过程修改了数据库表,它们就会自动执行。
在很多情况下调用存储过程并且它似乎执行正常,因为没有引发错误并且 .NET 应用程序照常继续。但是,如果我随后深入了解并通过 SQL Server 客户端手动执行存储过程调用,我会看到在存储过程失败后立即执行的触发器,从而回滚所有更改。
所以我的问题是:在我们的 .NET --> 存储过程 --> 触发场景中检测和传递错误的最佳方法是什么,以便在 .NET 应用程序中确定在发生错误时一切是否成功?
非常感谢,史蒂夫
更新:我现在在家,周末远离我的办公桌(和代码库),所以没有机会检查存储过程的细节。非常感谢到目前为止给出的答案。下周我可以再看一下代码。
但与此同时...
一个问题是关于 MS SQL Server 的版本:它是 2008 年。
据我所知,我们以这种方式调用存储过程(至少是那些不读取数据并且“只是”更新、删除或插入数据的过程):
Using connection As New SqlConnection("connectionString")
Dim command As New SqlCommand("EXEC STORED_PROCEDUR_ENAME), connection)
command.Connection.Open()
command.ExecuteNonQuery()
End Using
我认为上面代码背后的假设是,如果存储过程或相关触发器中出现故障,那么
command.ExecuteNonQuery()
然后会失败。这可能是我的第一个问题,即我是否必须更改此代码?下面的一个问题是我是否使用 ExecuteDataReader,所以答案是否定的,至少目前还没有……
我将在下面评论 SQL 特定的问题和建议。