【发布时间】:2017-08-31 05:24:33
【问题描述】:
我有这个结构的交易:
CREATE PROCEDURE XXX @param bit
AS
BEGIN TRAN
IF (@param = 1) BEGIN
-- DO SOME STUFF LIKE INSERT, UPDATE AND SO ON...
RETURN 1 -- RETURN 1 FOR SUCCESS
END
ELSE BEGIN
-- CONDITION IS NOT SUCCESSFUL SO NOTHING HAPPENED AND I NEED HANDLE
-- IN C#
RETURN -1
END
BEGIN TRY
COMMIT TRAN
END TRY
BEGIN CATCH
ROLLBACK TRAN
RETURN -1
END CATCH
我添加了一些 return clausule 但我不知道它是否是好的解决方案,并在 c# 代码中处理它?在 c# 中,我只需要处理 2 个状态:
- 如果条件合适,并且代码完成且没有错误返回 1 或 true
- 其他情况返回 -1 或 false
那个程序体可以吗?
感谢解答
【问题讨论】:
-
你看过TSql中的
RaiseError语句了吗?使用正确的参数调用它会导致在您的 C# 代码中引发异常。 -
执行 COMMIT TRAN 不会引发在 BEGIN TRANS 之后生成的错误,如果这就是想法 - 它们会在发生时引发,因此尝试/捕获 COMMIT 很奇怪
-
如果您在 BEGIN TRAN 之后返回,则将其保留为未提交和未回滚 - 有关一般模式,请参阅 sommarskog.se/error_handling/Part1.html。
-
请检查更新的问题,我已经添加了所需程序的图表
-
如果交易中没有发生任何事情,我也需要处理。