为什么在调用存储过程时会出现异常

本文关键字:异常 调用 存储过程 为什么 | 更新日期: 2023-09-27 18:03:45

我使用Entity Framework 6和Microsoft SQL Server 2012。

这是我的存储过程:

ALTER PROCEDURE SPDeleteRegion
      @siteId int,
      @regionId int 
AS
BEGIN 
    SET NOCOUNT ON;
    DECLARE @isDeleted BIT 
    IF EXISTS (SELECT 1 FROM SiteObjects WHERE SiteRegionId = @regionId)
    BEGIN
        SET @isDeleted = 0 ; --not deleted
        RETURN @isDeleted;
    END
    ELSE
    BEGIN
        --do what needs to be done if not       
        DELETE FROM SiteRegions 
        WHERE Id = @regionId;
        SET @isDeleted = 1;  -- deleted
        RETURN @isDeleted;
    END
END
下面是我如何在c#中调用存储过程:
var t = _context.Database.SqlQuery<bool>("SPDeleteRegion @siteId, @regionId",
                                          new SqlParameter("@siteId", siteId),
                                          new SqlParameter("@regionId", regionId));
在上面的代码行中,我得到了这个异常:

数据读取器有多个字段。多个字段对EDM原语类型或枚举类型无效。

知道为什么我得到异常和如何修复它吗?

为什么在调用存储过程时会出现异常

程序没有选择任何东西。像这样修改:

ALTER PROCEDURE SPDeleteRegion
    -- Add the parameters for the stored procedure here
      @siteId int,
      @regionId int 
AS
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    DECLARE 
    @isDeleted BIT 
    IF EXISTS (SELECT 1 FROM SiteObjects WHERE SiteRegionId = @regionId)
    BEGIN
        SET @isDeleted = 0 ; --not deleted
        SELECT @isDeleted [IsDeleted]; --HERE
    END
    ELSE
    BEGIN
        --do what needs to be done if not       
        DELETE FROM SiteRegions WHERE Id = @regionId;
        SET @isDeleted = 1;--deleted
        SELECT @isDeleted [IsDeleted]; -- AND HERE
    END
END