我在SQL Server存储过程的末尾有以下部分:
if(@someValue < 0)
begin
SELECT @resultIsSuccess = 0
Return @resultIsSuccess
end
else
begin
SELECT @resultIsSuccess = 1
Return @resultIsSuccess
end
其中@resultIsSuccess
的类型为bit
。
所以,基本上我正在返回一个bool来表明该程序是否产生了预期的结果。
在EF端,我将Function Import的返回类型配置为boolean。
我打电话的时候:
bool isSuccess = context.MyFunctionImport(arg1, arg2).FirstOrDefault().Value;
我得到以下异常:
商店数据提供商返回的数据阅读器没有 足够的列用于请求的查询。
这里有什么问题?
答案 0 :(得分:2)
如果要返回值,则需要返回参数。因此,您没有使用datareader
来获取价值。您不是select
任何东西,因此您需要有权访问该返回参数。
而是select
您的值填充datareader
,因为当您尝试从非实例化的datareader
通过EF读取值时,您可能会收到错误。
if(@someValue < 0)
SELECT 0
else
SELECT 1
我不确定是否支持返回值reference,因此您可能会尝试执行不可能的操作,除非在较新版本中修复。
答案 1 :(得分:0)
您必须记住,您没有从过程中返回一些数据类型。存储过程的返回数据类型是int。
您可以将代码大大简化为单行返回语句。
return case when @someValue < 0 then 0 else 1 end
然后在您的代码中,您需要将0或1解析为布尔值。
- EDIT-- 由于您要查找第一个值,因此需要在过程中使用select语句。这样的事情。
Select isSuccess = case when @someValue < 0 then 0 else 1 end