场景:对数据库进行一些复杂的运算,或者是最普通的对增删改查.
目的:方便前端应用程序(C#,delphi)能准确判断出存储过程中的代码是否执行成功。
注意:我的每个存储过程中都会有
set nocount on
declare @error int set @error = 0;
这两行代码
方法1:create proc test
(
@parm1 ...,
@parm2 ...,
@parm3 ...,
@result int output
)
as
begin
set nocount on
declare @error int set @error = 0;
......
set @result = 1
end方法2:create proc test
(
@parm1 ...,
@parm2 ...,
@parm3 ...
)
as
begin
set nocount on
declare @error int set @error = 0;
......
set @result = 1
RETURN @error
end
请问:哪种写法更加优雅?若全部不优雅,请讲给你认为优雅的写法(需要方便前段程序方便判断存储过程是否执行成功)?
目的:方便前端应用程序(C#,delphi)能准确判断出存储过程中的代码是否执行成功。
注意:我的每个存储过程中都会有
set nocount on
declare @error int set @error = 0;
这两行代码
方法1:create proc test
(
@parm1 ...,
@parm2 ...,
@parm3 ...,
@result int output
)
as
begin
set nocount on
declare @error int set @error = 0;
......
set @result = 1
end方法2:create proc test
(
@parm1 ...,
@parm2 ...,
@parm3 ...
)
as
begin
set nocount on
declare @error int set @error = 0;
......
set @result = 1
RETURN @error
end
请问:哪种写法更加优雅?若全部不优雅,请讲给你认为优雅的写法(需要方便前段程序方便判断存储过程是否执行成功)?
是通过方法1中的@result output来判断执行是否成功呢?还是通过方法2中的@error来判断执行是否成功呢?哪种优雅些。呵呵。
当C#程序员与DBA开发人员之间有一个良好的契约时,整个team跳起舞来才协调。
对于存储过程返回值,有统一的标准。
原因是:我个人认为c#中用ExecuteScalar或ExecuteNonQuery方法来判断存储过程是否执行成功,总感觉有点别扭。(有时返回-1,有时返回>1的值)
output参数从自然来说时返回数据的,所以应该在返回数据时使用。搂主的情况,显然是返回执行状态的,用return自然,也就优雅了,至于会不会跳舞,我不知道
是优雅两个字用得不恰当吗?主要使c#组与DB开发组之间有一个良好的编码习惯。形成一种好的契约而已。呵呵!至于“跳舞”二字,你忽略掉就行。