首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回null的ExecuteScalar

返回null的ExecuteScalar
EN

Stack Overflow用户
提问于 2012-04-26 19:36:45
回答 2查看 2K关注 0票数 1

我有一个使用事务的sql查询,它使用return来指示失败或成功,如下所示:

代码语言:javascript
复制
BEGIN

    DECLARE @intErrorCode INT;
    DECLARE @emailAutoIncrement INT;

    BEGIN TRAN


    INSERT  INTO Accounts ( blabla, blabla2 )
    VALUES  ( somevalue, somevalue2 )

    Select @intErrorCode = @@ERROR
    if (@intErrorCode <> 0) GOTO PROBLEM

    COMMIT TRAN
    RETURN 1


    PROBLEM:
    if (@intErrorCode <> 0) Begin
    Rollback Tran
    RETURN 0
    END

END

在代码中,我使用了sqlCommand.ExecuteScalar(),我认为这将给我1或0,但这总是返回false。另外,我遇到的另一个问题是,当sql中发生异常时,程序本应返回0,但实际上却返回了异常。

所以RETURN 0是无用的,因为它总是被异常覆盖?

为了添加更多信息,sql查询是一个存储过程,其名称如下:

代码语言:javascript
复制
                myCommand.CommandText = "createAccount";
                myCommand.CommandType = CommandType.StoredProcedure;
                //Add parameters here
                using (myReader)
                {
                    var test = myCommand.ExecuteScalar();
                }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 19:53:03

尝试SELECT而不是RETURN

代码语言:javascript
复制
BEGIN

    DECLARE @intErrorCode INT;
    DECLARE @emailAutoIncrement INT;

    BEGIN TRAN


    INSERT  INTO Accounts ( blabla, blabla2 )
    VALUES  ( somevalue, somevalue2 )

    SET @intErrorCode = @@ERROR
    if (@intErrorCode <> 0) GOTO PROBLEM

    COMMIT TRAN
    SELECT 1


    PROBLEM:
    if (@intErrorCode <> 0) Begin
    Rollback Tran
    SELECT 0
    END

END

我也变了

代码语言:javascript
复制
SELECT @intErrorCode = @@ERROR

代码语言:javascript
复制
SET @intErrorCode = @@ERROR
票数 3
EN

Stack Overflow用户

发布于 2012-04-26 19:53:01

尝试而不是返回1以使用Select 1

对于MSSQL中的第二个问题,建议使用try catch块。

这是我使用的,不知道它是不是最好的做法,但它允许更多的可能性,你可以记录错误,自定义文本的消息

代码语言:javascript
复制
BEGIN TRY...
END TRY
BEGIN CATCH
    declare @ErrorMessage nvarchar(4000),@ErrorSeverity int,@ErrorState int
    select @ErrorMessage = ERROR_MESSAGE(),@ErrorSeverity = ERROR_SEVERITY(),@ErrorState=ERROR_STATE()
    set @ErrorState=case when isnull(@ErrorState,0) <1 then 1 else @ErrorState end  
    raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10332598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档