Nvarchar qiymatini aylantirishda ASP.NET ishlab chiqarish muvaffaqiyatsiz tugadi

Bosh sahifadagi kirish sessiyasida foydalanuvchi nomini ko'rsatishga harakat qilaman, unga kirganimdan so'ng, men ushbu xatoni oldim

Nvarchar qiymatini ma'lumotlar turiga o'tkazish paytida konvertatsiya qilish amalga oshmadi   int.

Mana mening 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();

                    }

            }
        }
    }
  }
}

Va mening 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
Foydalanuvchining jadvali UserID ustunining turi qanday?
qo'shib qo'ydi muallif Wanderer, manba
Foydalanuvchining hisob identifikatori nomi va ichki identifikatori ikki xil narsadir.
qo'shib qo'ydi muallif StingyJack, manba

5 javoblar

Siz yozgansiz

SELECT Username FROM Users WHERE [email protected]

hali foydalanuvchi nomi bilan o'tgan @UserID parametri uchun.

Siz yozishni istamaganingizdan aminmisiz?

SELECT Username FROM Users WHERE Username = @UserID

Bu mantiqan to'g'ri keladi. UserID va foydalanuvchi nomi mos kelmasligi mumkin, men kutmoqdaman. Bundan tashqari, ma'lumotlar bazasida UserID kodi tamsayı ustunligini hisobga olgan holda, foydalanuvchi nomi bir magistr (ya'ni, SQL Server parvarishida nvarchar) ekanligini va mantiqan aslo raqamni mag'lubiyatga solishtirish.

1
qo'shib qo'ydi

Sizning ma'lumotlar bazangizda noto'g'ri UserID ma'lumotlar turi int va nvarchar emas. Sinash:

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

Men tizimga sessiya ["UserID"] ni o'rnatishingiz va bu so'rovdan foydalanishingiz kerak deb o'ylayman

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

login-ni tanlang, UserID foydalanuvchi nomidan farq qiladi

0
qo'shib qo'ydi

Foydalanuvchi nomingizdan foydalanuvchi nomingizdan foydalanmoqdasiz. Bu yerda:

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

Bu shunday bo'lishi kerak:

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

agar siz UserIdni sessiyada saqlasangiz. yoki SELECT foydalanuvchi nomi FROM foydalanuvchilar WHERE Foydalanuvchi = @ UserID ?

Sizning boshqa tanlovingizda ham xatolik bor, u bo'lishi kerak

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
qo'shib qo'ydi

Siz bu yerda foydalanuvchi nomini o'tdingiz:

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

Buning o'rniga Userid o'ting va hech qanday muammo bo'lmasligi kerak.

0
qo'shib qo'ydi