[英]ASP.NET MVC4 return output from a stored procedure with Entity Framework
[英]Getting multiple output from stored procedure using mvc4 razor
我使用带有mvc4剃须刀的存储过程来获取两个值。 我已经使用下面的代码来获取用户ID和用户类型。 现在如何使它从存储过程中同时返回userid和usertype?
logintable.cs
public partial class Userlogintable
{
public int UserID { get; set; }
public string Usertypename { get; set; }
public int Usertype { get; set; }
public string FullName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
家用控制器.cs
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(logintable u)
{
loginEntitiesdb = new loginEntities();
int a = db.splogindata(u.Username, u.Password).First().Value;
//a returns only usertype
return View(p);
}
存储过程:
ALTER PROCEDURE [dbo].[splogindata]
@Username varchar(30),
@Password varchar(30)
AS
declare @Userroletype int
BEGIN
SET NOCOUNT ON;
SELECT
fullname, userid, usertype
FROM
logintable
WHERE
Username = @Username
AND Password = @Password
END
在这里,仅返回我从存储过程中获得的用户类型。 logintable包含全名,用户名,用户类型,密码和用户名列。
我如何从表中获取用户类型和用户ID,以便可以将值存储在参数中并用于将其传递给其他函数。
创建一个模型来表示要从存储过程返回的数据:
public class MyReturnModel
{
public int UserId { get; set; }
public int UserType { get; set; }
}
然后调用存储过程并使用ObjectContext.Translate将结果映射到模型:
public MyReturnModel DoLogin(logintable u)
{
using (var db = new MyContext())
{
var cmd = db.Database.Connection.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "splogindata";
var u = cmd.CreateParameter();
u.DbType = DbType.String;
u.ParameterName = "@Username";
u.Value = u.Username;
cmd.Parameters.Add(u);
var p = cmd.CreateParameter();
p.DbType = DbType.String;
p.ParameterName = "@Password";
p.Value = u.Username;
cmd.Parameters.Add(p);
db.Database.Connection.Open();
var reader = cmd.ExecuteReader();
// return list as ObjectList
var results = ((IObjectContextAdapter) db).ObjectContext.Translate<MyReturnModel>(reader);
// cast to entity
var returnModel = (from s in results select s).FirstOrDefault();
db.Database.Connection.Close();
}
return returnModel;
}
这是一个简化的示例,实际上,您可以尝试一下...抓住对Open
的调用,并且结束将在finally
块中。
此方法可用于返回多个记录集(使用ToList()而不是FirstOrDefault),对于返回多个结果集(否则需要多个数据库调用)也非常有用。
更新
要返回登录表中的所有列,您需要在“映射”模型中添加额外的属性:
public string Usertypename { get; set; }
public string FullName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
显然,您可以将SELECT语句更新到存储过程中以进行匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.