C# 为什么调用存储过程时出现异常?
我正在使用Entity Framework 6和Microsoft SQL Server 2012 以下是我的存储过程:C# 为什么调用存储过程时出现异常?,c#,.net,entity-framework,C#,.net,Entity Framework,我正在使用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 SiteRegionI
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
您的过程没有选择任何内容。更改如下:
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
为什么将bool指定为类型参数_context.Database.SqlQuery?您的过程不会返回任何内容。它不会返回以下内容:@isDeleted;我正在使用Oracle。在Oracle中,若要从过程返回某些内容,必须在过程声明中将其指定为输出参数。其他数据库不是这样吗?您尚未在过程声明时声明isDeleted。SQL Server中存储过程的返回值始终为INT或bigint-通常表示有多少行受到插入、更新或删除操作的影响。不能使用RETURN关键字发回位-您需要使用输出参数,或者需要选择位并返回结果set@marc_s如果没有行受影响,为什么返回-1?为什么将bool指定为类型参数_context.Database.SqlQuery?您的过程不会返回任何内容。它不会返回以下内容:@isDeleted;我正在使用Oracle。在Oracle中,若要从过程返回某些内容,必须在过程声明中将其指定为输出参数。其他数据库不是这样吗?您尚未在过程声明时声明isDeleted。SQL Server中存储过程的返回值始终为INT或bigint-通常表示有多少行受到插入、更新或删除操作的影响。不能使用RETURN关键字发回位-您需要使用输出参数,或者需要选择位并返回结果set@marc_s如果没有影响行,为什么返回-1?