2013-02-23 38 views
0

我已經在SQL Server 2008中寫了下面的存儲過程調用存儲過程時返回值:問題與EF4

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) 

而且我從C#代碼隱藏通過EF4調用這樣說:

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#代碼隱藏傳遞參數,並得到返回值'0'

任何幫助,將不勝感激。

回答

1

我發現問題: 我已經設置了參數是這樣的:

@TodayShamsiDate nvarchar 

,我應該已經指定爲nvarchar

的長度
@TodayShamsiDate nvarchar(10) 

我做到了,問題就解決了!

+0

+1是啊 - 錯過了。如果你沒有指定長度,你會得到** 1個字符**長度 - 這可能不是你想要的... – 2013-02-23 10:27:39

1

我通常做的是這樣的:在Add Function Import對話框中,選擇您的存儲過程,並定義它返回一個收集標量:的Int32

enter image description here

然後在你的代碼,調用它像這樣:

int value = db.getTodayNumberOfRegisteration(shamsiDate).First().Value; 

這通常對我來說工作得很好。

如果你不把它定義爲回報的集合:的Int32,看來你要回值是真的返回值從存儲過程調用,例如受存儲過程執行影響的行數(SELECT爲0或-1,因爲您沒有實際插入,更新或刪除任何行):

+1

我做了同樣的事情,但我不知道爲什麼它不起作用! – Karamafrooz 2013-02-23 08:51:00