ASP.NET Пераўтварэнне не ўдалося пры пераўтварэнні значэння NVARCHAR

Я спрабую адлюстраваць імя карыстальніка ў сеансе ўваходу ў майстар-старонцы, я атрымаў гэтую памылку пасля таго, як я увайсці ён кажа

<�Р> Канверсія атрымалася пры пераўтварэнні значэння NVARCHAR да тыпу дадзеных   унутр.

Вось мой 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();

                    }

            }
        }
    }
  }
}

А вось мой 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
Што такое тып дадзеных UserID калонкі ў Карыстальнікі табліцы?
дададзена аўтар Wanderer, крыніца
Імя ўліковага запісу уліковых дадзеных карыстача і Thier ўнутраны ідэнтыфікатар дзве розныя рэчы.
дададзена аўтар StingyJack, крыніца

5 адказы

вы напісалі

SELECT Username FROM Users WHERE [email protected]

ўсё ж для @UserID параметру вы перадаеце імя карыстальніка.

Вы ўпэўненыя, што не хацеў пісаць

SELECT Username FROM Users WHERE Username = @UserID

Гэта мела б больш сэнсу. Идентификатор_пользователя і імя карыстальніка наўрад ці супадуць, я б чакаць. Гэта таксама дапамагло б растлумачыць памылку, так як я мяркую, што Идентификатор_пользователя у базе даных уяўляе сабой цэлы лік слупка, у той час як імя карыстальніка з'яўляецца радком (г.зн. NVARCHAR у прастамоўі SQL Server) - і лагічна вы не можаце параўнаць лік у радок.

1
дададзена

profiously Идентификатор_пользователя тып дадзеных Int , а не NVARCHAR на вашай базе дадзеных. спроба:

 cmd.Parameters.Add("@UserID",SqlDbType.Int).Value = int.Parse(Session["Username"].ToString());
0
дададзена

Я думаю, вы павінны ўсталяваць сеанс [ «UserID»] у лагіне і выкарыстоўваць, што ў гэтым запыце

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

база вашага выбару ў аўтарызацыі, Ідэнт diffrent ад лагіна

0
дададзена

Вы карыстаецеся сістэму ў якасці UserID. тут:

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

Яно павінна быць:

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

калі вы захавалі UserId ў вас сесіі. або SELECT Імя карыстальніка FROM Users WHERE Імя карыстальніка = @ Идентификатор_пользователя ?

Акрамя таго, ёсць памылка ў вашым сябрам выбары, ён павінен быць

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
дададзена

Вы перадаеце імя карыстальніка ў якасці ідэнтыфікатара карыстальніка тут:

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

прайсці USERID замест гэтага і не павінна быць ніякіх праблем.

0
дададзена