我在SQL Server 2008中编写了以下存储过程:
ALTER Procedure [dbo].[usp_TodayNumberOfRegisteration]
(
@TodayShamsiDate nvarchar
)
AS
Select COUNT(csci.Id) as cc1 FROM dbo.Complex_Service_Cart_Items csci INNER JOIN dbo.Complex_Service_Cart csc
ON csci.Id_Complex_Service_Cart=csc.Id
WHERE (csci.Id_Complex_Service='2cca1a67-34f4-4837-bebe-f3ba4c72b98d' or csci.Id_Complex_Service='8430cad2-dbb1-4425-bb8b-a7e158f688c4')
and csc.TFIsPaymentComplete=1
and csc.TFDateBackFromBankp= RTRIM( @TodayShamsiDate)
我用这种方式通过EF4从C#代码隐藏调用它:
string shamsiDate = Date.getShamsiDate();
returnValue = Convert.ToString(db.getTodayNumberOfRegisteration(shamsiDate).First().Value);
其中getTodayNumberOfRegisteration
是我添加到edmx
模型的函数。
现在出现问题:当我在SQL Server中执行存储过程而不是
时 and csc.TFDateBackFromBankp= RTRIM( @TodayShamsiDate)
我设置了类似的内容:
and csc.TFDateBackFromBankp= RTRIM( '1391/12/05')
此存储过程返回值6
但是当我从C#codebehind传递参数时,我得到返回值'0'
任何帮助都将不胜感激。
答案 0 :(得分:1)
我通常这样做:在Add Function Import
对话框中,选择您的存储过程并定义它返回标量集合:Int32 :
然后在您的代码中,将其称为:
int value = db.getTodayNumberOfRegisteration(shamsiDate).First().Value;
这通常适用于我。
如果你没有定义它,因为返回了一个:Int32 的集合,你回来的值似乎是来自存储的返回值程序调用,例如受存储过程执行影响的行数(SELECT
为0或-1,因为您实际上没有插入,更新或删除任何行):
答案 1 :(得分:1)
我发现了这个问题: 我用这种方式设置了参数:
@TodayShamsiDate nvarchar
我应该指定nvarchar的长度
@TodayShamsiDate nvarchar(10)
我做到了,问题解决了!