gpt4 book ai didi

sql - 从 .Net 应用程序调用存储过程后如何检测触发器失败?

转载 作者:行者123 更新时间:2023-12-03 00:50:00 25 4
gpt4 key购买 nike

我们有一个 .NET 应用程序 (VB/VS2010),并在 SQL Server 2008 上调用许多存储过程来进行数据库查询。我们还有很多更新/插入/删除触发器,一旦这些存储过程修改数据库表,它们就会自动执行。

在很多情况下,当调用存储过程时,它似乎执行正常,因为没有引发错误,并且 .NET 应用程序照常运行。但是,如果我随后深入了解并通过 SQL Server 客户端手动执行存储过程调用,我会发现在存储过程失败后立即执行的触发器,从而回滚所有更改。

所以我的问题是:在 .NET --> 存储过程 --> 触发场景中检测和传递错误的最佳方法是什么,以便在 .NET 应用程序中确定一切是否成功错误?

提前非常感谢,史蒂夫

<小时/>

更新:我现在在家,周末离开办公 table (和代码库),因此没有机会检查存储过程的详细信息。非常感谢迄今为止给出的答案。下周我可以再看一下代码。

但与此同时...

一个问题是关于 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 特定问题和建议。

最佳答案

我今天实际上也遇到了同样的问题,

为了解决这个问题,我使用了输出@msg并将其放置在存储过程中的每个函数之后。

SET @msg = 'Test print 1'

我在每个部分都添加了一个,这样我就知道最后打印的数字是存储过程失败的地方。然后,我转到触发器失败的表并对其进行调整,直到它打印最后一个数字并通过。

关于sql - 从 .Net 应用程序调用存储过程后如何检测触发器失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11265545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com