是否有人可以指导我如何在ASP.NET MVC / EF中执行SQL Server存储过程 申请并获得结果?
SQL Server存储过程
CREATE PROCEDURE dbo.StoredProcedure2 AS
declare @parameter2 int
SET @parameter2 = 4
RETURN @parameter2
MVC代码
private readonly TestDatastoreContext _context = new TestDatastoreContext();
public ViewResult Index(string id)
{
ViewData["EnvironmentId"] = id;
using (_context)
{
_context.Database.Connection.Open();
var command = _context.Database.Connection.CreateCommand();
command.CommandText = "dbo.StoredProcedure2";
command.CommandType = System.Data.CommandType.StoredProcedure;
var test = (command.ExecuteScalar());
}
var bigView = new BigViewModel
{
VersionsModel = _context.Versions.ToList(),
EnvironmentViewModel = _context.Environments.ToList(),
};
return View(model: bigView);
}
答案 0 :(得分:9)
你的问题是这样的:你从存储过程返回值(使用RETURN @paramter2
),但你的.NET代码试图读取结果集;通过在存储过程
SELECT .....
语句“返回”的东西
因此,请将存储过程更改为:
CREATE PROCEDURE dbo.StoredProcedure2 AS
declare @parameter2 int
SET @parameter2 = 4
SELECT @parameter2
然后您的.NET代码应该可以正常工作。
RETURN
语句只能用于状态代码,它只能返回INT
个值。如果您想使用它,则必须使用SqlParameter
Direction.ReturnValue
答案 1 :(得分:4)
查看此官方文档,了解如何将Stored Procedure
映射到您的上下文:
Stored Procedures in the Entity Framework
映射完成后,您就可以通过这种方式调用Stored Procedure
:
var val = _context.StoredProcedure2();
答案 2 :(得分:2)
一种选择就是这样做:
MyReturnEntity ret = context.Database
.SqlQuery<MyReturnEntity>("exec myStoredProc ?, ?", param1, parm2);
答案 3 :(得分:0)
您可以使用此库: https://github.com/mrmmins/C-StoreProcedureModelBinding
以List的形式返回值,您只需要创建一个包含名称和值类型的简单类,如:
var productos = DataReaderT.ReadStoredProceadures<MyCustomModel>(myDbEntityInstance, "dbo.MySPName", _generic);
和MyCumtomModel类类似于:
public int id {get; set;}
public int salary {get; set;}
public string name {get; set;}
public string school {get; set;}
和通用类似:
List<Generic> _generic = = new List<Generic>
{
new Generic
{
Key = "@phase", Type = SqlDbType.Int, Value = "207"
}
}
};
现在,您的products
有以下选项:products.First()
,products.Count()
,foreach
等。