none
ADO下存储过程为何返回的recordset为空 RRS feed

  • 问题

  • 存储过程中均已设置set nocount on,纯select或者delete一些记录然后select,均可以获取recordset,rs->GetRecordCount()返回正确记录数。但是在存储过程中insert一些记录然后select,就无法获取相应recordset,rs->GetRecordCount()返回均为0。请教解决办法。

    
    
    2014年7月25日 7:46

答案

  • if @@ROWCOUNT>0 
    begin
    set @is_exist=1
    end
    else
    begin
    INSERT INTO [Actor] ([UsreID],[ActorName]) VALUES (@UsreID,@ActorName)
    -----------recordset---------------
    SELECT [ActorName],[ActorID] FROM [Actor] WHERE [UsreID]=@UsreID
    end

    晕这个判断的问题吧? 如果存在,则不会有任何结果集返回,只有当不存在的时候,才会插入并返回结果集

    • 已标记为答案 sgzwiz2 2014年8月16日 9:58
    2014年8月8日 2:09

全部回复

  • 存储过程脚本拿出来看看呢

    你可以先试试弄个简单的, 确定看你的调用有没有问题

    2014年7月25日 10:20
  • ALTER PROCEDURE [dbo].[Create]
    @UsreID int,

    @ActorName varchar(32)

    AS
    BEGIN
    set nocount on
        BEGIN TRANSACTION
    declare @is_exist as int
    set @is_exist=0
        BEGIN TRY
    select ID from [Actor] where [ActorName]=@ActorName
    if @@ROWCOUNT>0 
    begin
    set @is_exist=1
    end
    else
    begin
    INSERT INTO [Actor] ([UsreID],[ActorName]) VALUES (@UsreID,@ActorName)
    -----------recordset---------------
    SELECT [ActorName],[ActorID] FROM [Actor] WHERE [UsreID]=@UsreID
    end
        END TRY
        BEGIN CATCH
            IF @@TRANCOUNT > 0
            BEGIN
                ROLLBACK TRANSACTION;
                return -1
            END
        END CATCH;
        IF @@TRANCOUNT > 0
        BEGIN
    COMMIT TRANSACTION;
    if @is_exist=0 
    begin
    return 1
    end
    else
    begin
    return -1
    end
        END
    END

    2014年7月25日 12:38
  • 插入数据都是成功的,用sqlserver management studio也能正确运行并获取记录集,但就是ADO下,RS->GetRecoedCount()为0。把insert那句改为delete一个记录,ADO却能获取记录集,RS->GetRecoedCount()也返回正确的记录数。不知为何这样?
    2014年7月25日 12:47
  • if @@ROWCOUNT>0 
    begin
    set @is_exist=1
    end
    else
    begin
    INSERT INTO [Actor] ([UsreID],[ActorName]) VALUES (@UsreID,@ActorName)
    -----------recordset---------------
    SELECT [ActorName],[ActorID] FROM [Actor] WHERE [UsreID]=@UsreID
    end

    晕这个判断的问题吧? 如果存在,则不会有任何结果集返回,只有当不存在的时候,才会插入并返回结果集

    • 已标记为答案 sgzwiz2 2014年8月16日 9:58
    2014年8月8日 2:09
  • 返回了2个记录集,其实我只要后面那个结果集。前面一个记录集为空的,自然recordcout=0。把前面一个select查询with掉,就ok了。多谢!

    2014年8月16日 6:41