1
我在这种结构有交易:正确的方式来处理错误在TSQL交易
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
我已经添加了一些回报clausule,但我不知道是否是它很好的解决方案,并在C#中处理它码?在C#中,我需要处理的只有2个状态:
- 如果条件适合,和代码没有错误做返回1或真
- 其他情况下返回-1或虚假
是该程序的身体OK的那?
感谢答案
你看在TSQL的'RaiseError'声明?使用正确的参数调用它会导致在您的C#代码中抛出异常。 –
执行COMMIT TRAN不会引发在BEGIN TRANS之后产生的错误,如果这是个想法 - 当它们发生时被引发,因此奇数到TRY/CATCH一个COMMIT –
如果您在BEGIN TRAN之后返回,则将其保留为未提交&unrolledback - 请参阅http://www.sommarskog.se/error_handling/Part1.html获取一般模式。 –