ASP.NET-conversie is mislukt bij het converteren van de nvarchar-waarde

Ik probeer de gebruikersnaam in login-sessie op de hoofdpagina weer te geven. Ik kreeg deze foutmelding nadat ik me aanmeldde

Conversie mislukt bij het converteren van de nvarchar-waarde naar het gegevenstype   int.

Dit is mijn MasterPage.cs

public partial class HRPortal_HRPortalMaster : System.Web.UI.MasterPage
{
  protected void Page_Load(object sender, EventArgs e)
  {

    if (Session["Username"] != null)
    {
        if (!IsPostBack)
        {
            GetName();
        }
    }

  }
  void GetName()
  {
    using (SqlConnection con = new SqlConnection(Helper.GetCon()))
    {

        string query = @"SELECT Username FROM Users WHERE [email protected]";
        con.Open();
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@UserID", Session["Username"].ToString());
            using (SqlDataReader dr = cmd.ExecuteReader())
            {


                    while (dr.Read())
                    {
                        ltName.Text = dr["Username"].ToString();

                    }

            }
        }
    }
  }
}

En hier is mijn Login.cs

protected void btnLogin_Click(object sender, EventArgs e)
{

    using (SqlConnection con = new SqlConnection(Helper.GetCon()))
    {
        con.Open();
        string query = @"SELECT u.UserID, u.Username, u.Password, t.UserType FROM Users u INNER JOIN UserType t ON t.TypeID = u.TypeID WHERE [email protected] AND [email protected]";

        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            cmd.Parameters.AddWithValue("@Username", txtUsername.Text);
            cmd.Parameters.AddWithValue("@Password", Helper.CreateSHAHash(txtPassword.Text));
            //DataTable dt = new DataTable();
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.HasRows)
                {

                    while (dr.Read())
                    {

                        string Utype;
                        Utype = dr["UserType"].ToString();
                        if (Utype == "Employee")
                        {
                            Session["Username"] = txtUsername.Text;
                            Response.Redirect("~/HrPortal/Home.aspx");
                        }
                        else
                        {
                            Session["Username"] = txtUsername.Text;
                            Response.Redirect("~/Administrator/Home.aspx");
                        }
                    }

                }
                else
                {
                    error.Visible = true;
                }
            }
        }
    }
0
Wat is het datatype van de kolom UserID in de tabel Gebruikers ?
toegevoegd de auteur Wanderer, de bron
De gebruikersnaam en de interne IDentifier van een gebruiker zijn twee verschillende dingen.
toegevoegd de auteur StingyJack, de bron

5 antwoord

Je schreef

SELECT Username FROM Users WHERE [email protected]

maar voor de parameter @UserID geef je de gebruikersnaam door.

Weet je zeker dat je niet wilde schrijven?

SELECT Username FROM Users WHERE Username = @UserID

Dat zou logischer zijn. Het is onwaarschijnlijk dat de gebruikersnaam en de gebruikersnaam overeenkomen, zou ik verwachten. Het zou ook helpen om de fout te verklaren, omdat ik veronderstel dat UserID in de database een kolom met een geheel getal is, terwijl de gebruikersnaam een ​​string is (dwz nvarchar in SQL Server-spraak) - en logisch gezien kan dat niet vergelijk een nummer met een string.

1
toegevoegd

zakelijk UserID datatype is int en niet nvarchar in uw database. Proberen:

 cmd.Parameters.Add("@UserID",SqlDbType.Int).Value = int.Parse(Session["Username"].ToString());
0
toegevoegd

Ik denk dat je session ["UserID"] inlogt en dat gebruikt in deze query

string query = @"SELECT Username FROM Users WHERE [email protected]";

basis van uw keuze in login, UserID verschilt van gebruikersnaam

0
toegevoegd

U gebruikt uw gebruikersnaam als uw gebruikers-ID. Hier:

cmd.Parameters.AddWithValue("@UserID", Session["Username"].ToString());

Het zou moeten zijn:

cmd.Parameters.AddWithValue("@UserID", Session["UsedID"].ToString());

als u de UserId in uw sessie hebt opgeslagen. of SELECT-gebruikersnaam van gebruikers WHERE gebruikersnaam = @ gebruikers-ID ?

Je hebt ook een fout in je andere selectie, dat zou het moeten zijn

SELECT u.UserID, u.Username, u.Password, t.UserType FROM Users u INNER JOIN UserType t ON t.TypeID = u.TypeID WHERE [email protected] AND **[email protected]**
0
toegevoegd

U geeft de gebruikersnaam door als userid hier:

 cmd.Parameters.AddWithValue("@UserID", Session["Username"].ToString());

pass Userid in plaats daarvan en er zou geen probleem moeten zijn.

0
toegevoegd