C# 在实体框架中调用存储过程
在SQL Server存储过程的末尾,我有以下部分:C# 在实体框架中调用存储过程,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,在SQL Server存储过程的末尾,我有以下部分: if(@someValue < 0) begin SELECT @resultIsSuccess = 0 Return @resultIsSuccess end else begin SELECT @resultIsSuccess = 1 Return @resultIsSuccess end 我得到以下例外情况: 存储数据提供程序返回的数据读取器没有 足够的列用于请求的查询 这里有什么
if(@someValue < 0)
begin
SELECT @resultIsSuccess = 0
Return @resultIsSuccess
end
else
begin
SELECT @resultIsSuccess = 1
Return @resultIsSuccess
end
我得到以下例外情况:
存储数据提供程序返回的数据读取器没有
足够的列用于请求的查询
这里有什么问题?如果要返回值,则需要返回参数。因此,您没有使用datareader来获取您的值。您没有选择任何内容,因此需要访问该返回参数 而是选择值来填充datareader,因为当您尝试通过EF从非实例化datareader读取值时,可能会出现错误
if(@someValue < 0)
SELECT 0
else
SELECT 1
我不确定是否支持返回值,因此除非在更新的版本中修复,否则您可能会尝试执行不可能的操作。如果您要返回值,则需要返回参数。因此,您没有使用datareader来获取您的值。您没有选择任何内容,因此需要访问该返回参数 而是选择值来填充datareader,因为当您尝试通过EF从非实例化datareader读取值时,可能会出现错误
if(@someValue < 0)
SELECT 0
else
SELECT 1
我不确定是否支持返回值,因此除非在更新版本中修复,否则您可能会尝试执行不可能的操作。您必须记住,您没有从过程中返回位数据类型。存储过程的返回数据类型为int 您可以将代码大大简化为一行返回语句
return case when @someValue < 0 then 0 else 1 end
然后在代码中需要将0或1解析为布尔值
-编辑-
由于要查找第一个值,因此需要在过程中使用select语句。像这样的
Select isSuccess = case when @someValue < 0 then 0 else 1 end
您必须记住,您并没有从过程中返回位数据类型。存储过程的返回数据类型为int 您可以将代码大大简化为一行返回语句
return case when @someValue < 0 then 0 else 1 end
然后在代码中需要将0或1解析为布尔值
-编辑-
由于要查找第一个值,因此需要在过程中使用select语句。像这样的
Select isSuccess = case when @someValue < 0 then 0 else 1 end
为什么不尝试选择0或选择1,而不是添加一个额外的行并声明一个变量?这可能是因为您实际上没有读取任何内容,而是输出到一个返回变量。您永远不应该使用存储过程的返回值来返回数据。使用输出参数或结果集。为什么不尝试选择0或选择1,而不是添加额外的行并声明变量?这可能是因为您实际上没有读取任何内容,而是输出到一个返回变量。您永远不应该使用存储过程的返回值来返回数据。使用输出参数或结果集。我尝试了这个方法,但调用函数时总是返回1。即使我将返回值更改为数字,如5或6,它仍返回1。您如何检查您的返回?返回值。老实说,您可能应该使用一个输出参数;啊……然后您将从过程中的第一个select语句中获取值……而不是返回值。我尝试了这个方法,但调用函数总是返回1。即使我将返回值更改为数字,如5或6,它仍返回1。您如何检查您的返回?返回值。老实说,您可能应该使用一个输出参数;啊……然后您将从过程中的第一个select语句中获取值……而不是返回值。