我有一个存储过程,如下所示:
ALTER PROCEDURE [dbo].[myProc]
@sampleParam1 VARCHAR (10)
AS
DECLARE @AccountID INT
--some business logic that evaluates value of @AccountID
SELECT @AccountID --I want to grab this value in .Net application.
我正在使用.Net执行此存储过程,如下所示:
class MyResult
{
public int AccountID { get; set; }
}
public void myfun()
{
myEntitesEntites = new MyEntites();//Using EF6
var result = myEntitesEntites.Database.SqlQuery<MyResult>
("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028"))
}
我期望result.AccountID
将保留存储过程中的最后SELECT @AccountID
语句的值。但result.AccountID
始终为0。
注意:当我从SSMS执行相同的存储过程时,我可以看到@AccountID
的实际值不是0。
我错过了什么吗?
提前致谢。
答案 0 :(得分:3)
更改存储过程
CREATE PROCEDURE [dbo].[myProc]
@sampleParam1 VARCHAR (10)
AS
DECLARE @AccountID INT = @sampleParam1
--some business logic that evaluates value of @AccountID
SELECT @AccountID as AccountID --I want to grab this value in .Net application.
public void myfun()
{
myEntitesEntites = new MyEntites();//Using EF6
var result = myEntitesEntites.Database.SqlQuery<MyResult>
("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028"))
}
结果存储过程中的列名必须与名称相同,而不是来自对象的属性。
您的程序[dbo].[myProc]
会返回int
值
例如,您可以在int上更改返回参数的类型。在这种情况下,方法SqlQuery
将从存储过程中返回变量@AccountID的正确值。
public MyResult myfun()
{
myEntitesEntites = new MyEntites();//Using EF6
int accountID = myEntitesEntites.Database.SqlQuery<int>
("exec [dbo].[myProc] @sampleParam1", new SqlParameter("sampleParam1", "20161028"))
return new MyResult()
{
AccountID = accountID
}
}