Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中调用存储过程_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 在实体框架中调用存储过程

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 我得到以下例外情况: 存储数据提供程序返回的数据读取器没有 足够的列用于请求的查询 这里有什么

在SQL Server存储过程的末尾,我有以下部分:

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语句中获取值……而不是返回值。