【发布时间】:2016-05-25 21:44:41
【问题描述】:
来自 Webforms 背景的 ASP.NET MVC 新手。我试图通过HttpContext.User.Identity.Name 将登录的用户名值传递给存储过程。我基本上是在尝试检查 Username 是否存在于数据库表中。我想我忽略了一些事情,因为我不太确定如何将User.Identity.Name 值传递给存储过程,以便它执行并返回一个存在或null/blank 的值。这是我的代码:
数据访问层类:
public LoggedUser GetLoggedUser(LoggedUser obj)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["HWebb"].ConnectionString);
string UserName = "";
try
{
SqlParameter[] parameters ={
new SqlParameter("@USER_CRED",obj.User_Name),
};
SqlCommand cmd = CreateCommand("PortalWeb.GetSelect_User", parameters, con);
DataTable dt = new DataTable();
con.Open();
SqlDataAdapter ada = new SqlDataAdapter(cmd);
ada.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
if (dr["USER_CRED"] != DBNull.Value)
UserName = Convert.ToString(dr["USER_CRED"]);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
}
return obj;
}
型号:
public class LoggedUser
{
public string User_Name { get; set; }
}
控制器:
public ActionResult UserVerification()
{
DataAccess dac = new DataAccess();
LoggedUser objUser = new LoggedUser();
objUser = dac.GetLoggedUser(objUser);
if (HttpContext.User.Identity.Name != objUser.User_Name)
{
return RedirectToAction("Index", "Home");
}
return null;
}
这不会导致任何错误,但我认为参数没有正确传递,因为表返回了 null 值,我不确定 HttpContext.User.Identity.Name 值是否被传递到第一名。
有没有办法将值从控制器传递到存储过程?我对此很陌生,所以我确定我缺少一些代码来使其功能齐全。我希望有人能帮帮忙。
谢谢!
【问题讨论】:
-
回答您的问题的关键是 CreateCommand 的代码。 Whitout 它谁知道传递给您的 sp 的内容是什么?只有你。
-
能否请您发布 CreateCommand 的代码
-
顺便说一句,您的代码逻辑似乎不正确。在控制器中,您创建一个 LoggedUser,但不设置任何属性,然后将此对象传递给 GetLoggedUser。然后使用 user_name 的值来搜索数据库,但在调用 GetLoggedUser 时它有任何值吗?
-
CreateCommand 是一个存储过程,本质上应该只返回一个用户名。也许这应该是 command.ExecuteNonQuery ?另外,您是否建议我将代码更改为 LoggedUser objUser = New LoggedUser(HttpContext.User.Identity.Name)。
标签: c# sql-server asp.net-mvc razor ado.net