2016-05-25 9 views
1

ASP.NET MVC Neuling hier aus einem Webforms Hintergrund. Ich versuche, den eingeloggten Benutzernamen-Wert über HttpContext.User.Identity.Name an eine gespeicherte Prozedur zu übergeben. Ich versuche im Grunde zu überprüfen, ob der Username in der Datenbanktabelle existiert oder nicht. Ich denke, dass ich etwas übersehen habe, da ich nicht ganz sicher bin, wie ich den Wert User.Identity.Name an die gespeicherte Prozedur übergeben kann, so dass sie ausgeführt wird und einen Wert zurückgibt, der entweder existiert oder null/blank. Hier ist mein Code:ASP.NET MVC übergeben Parameter an gespeicherte Prozedur von Controller ohne Entity Framework

Datenzugriffsschicht Klasse:

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; 
    } 

Modell:

public class LoggedUser 
{ 
    public string User_Name { get; set; } 
} 

Controller:

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; 
} 

Dies wird keinen Fehler verursachen, aber ich don‘ t denke, dass die Parameter korrekt übergeben werden, da die Tabelle einen Wert null zurückgibt, und ich bin nicht sicher, dass ich f HttpContext.User.Identity.Name Wert wird überhaupt an erster Stelle übergeben.

Gibt es eine Möglichkeit, den Wert vom Controller an die gespeicherte Prozedur zu übergeben? Ich bin neu in diesem Bereich, da bin ich mir sicher, dass mir ein Code fehlt, damit er voll funktionsfähig ist. Ich hoffe, dass jemand helfen kann.

Danke!

+0

Crucial Ihre Frage zu beantworten ist der Code von Create. Ohne es zu wissen wer weiß, was an deine SP weitergegeben wird? nur du. – Steve

+0

Könnten Sie bitte den Code für CreateCommand posten – vabii

+0

Übrigens, die Logik Ihres Codes scheint nicht richtig zu sein. Im Controller erstellen Sie einen LoggedUser, ohne jedoch Eigenschaften festzulegen, und übergeben dieses Objekt dann an den GetLoggedUser. Der Wert von user_name wird dann zum Durchsuchen der Datenbank verwendet, hat aber einen beliebigen Wert, wenn Sie GetLoggedUser aufrufen? – Steve

Antwort

0

Ich habe den Code geändert und es funktioniert jetzt, obwohl ich mir sicher bin, dass es einen besseren Ansatz dafür gibt.

public string GetLoggedUser(string User_Name) 
{ 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["HWebb"].ConnectionString); 
    string UserName = ""; 

    try 
    { 
     SqlParameter[] parameters ={ 
       new SqlParameter("@USER_CRED", 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 UserName; 
} 

Dann im Controller:

public ActionResult UserVerification() 
    { 

     DataAccess dac = new DataAccess(); 
     string UserNameApp = HttpContext.User.Identity.Name; 
     string UserName = dac.GetLoggedUser(UserNameApp); 

if (HttpContext.User.Identity.Name != UserName) { return redirecToAction("Index", "Home"); }

}