2013-08-27 113 views
0

我在這個網站上找到了答案,但是沒有一個能夠工作。我試圖從ASP.NET MVC web api中的簡單存儲過程返回結果。使用MVC的SQL Server存儲過程

這工作:

ctx.Database.SqlQuery <model>("StoredProc 1251"); 

但是,我始終儘管它是不良的做法,包括參數直列這樣。

閒來無事我在這裏試圖工程─是一些例子:

//Assuming this variable: 
int intValue; 
intValue = 1251; 

// None of these variations that I have tried work: 
ctx.Database.SqlQuery<model>("StoredProc @intValue= {0}", intValue); 
ctx.Database.SqlQuery<model>("StoredProc @IntValue", 1251); 
ctx.Database.SqlQuery<model>("StoredProc @IntValue", new SqlParameter("@IntValue",1251); 
//And 6 or 7 others 

所有給我一個無用的SQL Server錯誤消息:近SP

不正確的語法

什麼這是正確的語法?

不能回答我的問題,但是我發現了答案:

找到了正確的語法,或語法至少一個正確的選項,在其他地方stackoverflow-網站真的是rocks-我幾乎總能找到我在這裏回答!

var myInt = new SqlParameter("@IntVal", SqlDbType.Int); 
pMeme_ck.Value = 1251; 
return ctx.Database.SqlQuery<ClaimSummary>("EXEC StoredProcedureName @[email protected]", myInt); 
+0

什麼是SP?存儲過程?如果是這樣,請嘗試'EXEC SP @ intValue'。 –

+0

是的 - 但我實際上需要返回結果 - 不知道如何在這種情況下使用exec:return ctx.Database.SqlQuery (StoredOroc @ intVal = {0}「,myIntVal); – RickM

回答

0

您正在對數據庫執行原始SQL查詢。您需要執行存儲過程。

ctx.Database.SqlQuery<model>("EXEC StoredProc @IntValue", 1251); 

UPDATE: 你也可以試試執行:(更換與被退回你的實體類型名稱)

ctx.<EntityType>.SqlQuery("StoredProc @IntValue", 1251); 

這應返回EntityTypes這是由存儲過程「StoredProc」返回。這this有限的MSDN文檔。

+0

david,謝謝你的迴應,不幸的是,這似乎並沒有工作:第一種方式,我得到了:必須聲明標量變量「@intValue」第二個選項似乎不是有效的語法,並且不會編譯。 – RickM

+0

我從來沒有使用過如果你使用'@ p0'而不是'@ intValue',你會得到同樣的錯誤嗎? –