2013-09-29 66 views
2

我有螺紋下方ASP.NET MVC4 return output from a stored procedure with Entity FrameworkMVC4返回一個存儲過程的輸出與LINQ to SQL的

類似的問題我都試過,但我得到的錯誤同樣的事情:

Cannot assign void to an implicitly-typed local variable on

這裏是我的方法:

create PROCEDURE [dbo].[usp_UpdateValuesInTables] 
( 
    @s_clientid int, 
    @success int output 
) 
AS 
BEGIN 
    Begin Try 
     BEGIN TRAN 
      ---- sql statements 
     COMMIT TRAN 
     set @success=1 
    End Try 
    Begin Catch 
     ROLLBACK TRAN 
     set @success=0 
    End Catch 
END 

和C#代碼

int? success = null; 
var successCode = Context.usp_UpdateValuesInTables(Convert.ToInt32(obj.SourceClientDropDown),ref success); 

爲什麼我得到那個錯誤?

如果我試圖取代varint然後我收到錯誤

Can not implicitly convert type void to int

+0

如果直接從SQL服務器管理器執行此過程,則返回的值是否正確? – jose

+0

是喬希..其返回1或0 .... – Mahajan344

+0

假設上下文是由linq自動創建的dbDataContext,你試過int successCode = Context.usp_UpdateValuesInTables(Convert.ToInt32(obj.SourceClientDropDown),ref success).First( )。成功;? – jose

回答

0

試試這個:

int? success = null; 
Context.usp_UpdateValuesInTables(Convert.ToInt32(obj.SourceClientDropDown),ref success); 
var successCode = success; //success is the returned result. 
+0

我已經試過你的代碼,現在我得到錯誤'System.Void'不是映射存儲過程方法的有效返回類型。 – Mahajan344

0

你的問題是,存儲過程實際上並不返回一個值,但實體框架不知道Void返回。您需要確保在存儲過程中使用SET NOCOUNT ON,以便實體框架可以確定Void返回並映射默認值。

+0

好吧,當我將此存儲過程拖到dbml文件時,我收到一條消息,指出此存儲過程的返回類型無法檢測到。請在屬性窗口中設置存儲過程的返回類型。你認爲這是問題嗎? – Mahajan344

+0

在存儲過程中添加SET NOCOUNT ON後,您會收到該消息嗎?您在上面的代碼中編寫的存儲過程從不使用return語句,而是依賴於輸出變量。但是,實體框架需要返回一個類型,而不是輸出變量。使用'SET NOCOUNT ON'可以幫助實體框架了解存儲過程沒有返回任何內容,只執行操作。 – Claies

相關問題