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
<�कोड> उपयोगकर्ता कोड </कोड> स्तंभ का डेटाटाइप <�कोड> उपयोगकर्ता </कोड> तालिका में क्या है?
जोड़ा लेखक Wanderer, स्रोत
एक उपयोगकर्ता का खाता क्रेडेंशियल नाम और उसका आंतरिक पहचानकर्ता दो अलग-अलग चीजें हैं।
जोड़ा लेखक StingyJack, स्रोत

5 उत्तर

आप ने लिखा

SELECT Username FROM Users WHERE [email protected]

अभी तक @UserID पैरामीटर आप उपयोगकर्ता नाम में पास करते हैं।

क्या आप वाकई लिखना नहीं चाहते हैं?

SELECT Username FROM Users WHERE Username = @UserID

यह अधिक समझ में आता है। उपयोगकर्ता और उपयोगकर्ता नाम मेल खाने की संभावना नहीं है, मैं उम्मीद करूंगा। यह त्रुटि को समझाने में भी मदद करेगा, क्योंकि मैं मानता हूं कि डेटाबेस में UserID एक पूर्णांक स्तंभ है, जबकि उपयोगकर्ता नाम एक स्ट्रिंग है (यानी SQL सर्वर parlance में nvarchar) - और तार्किक रूप से आप नहीं कर सकते संख्या की तुलना स्ट्रिंग से करें।

1
जोड़ा

गहराई से UserID डेटाटाइप आपके डेटाबेस पर 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]";

लॉगिन में आपके चयन का आधार, यूजर आईडी यूजरनेम से अलग है

0
जोड़ा

आप अपने Username को अपने UserID के रूप में उपयोग कर रहे हैं। यहाँ:

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

यह होना चाहिए:

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

यदि आपने UserId को सत्र में संग्रहीत किया है। या उपयोगकर्ता से उपयोगकर्ता नाम का चयन करें जहां उपयोगकर्ता नाम = @ उपयोगकर्ता आईडी </कोड> है?

आपके दूसरे चयन में भी आपकी गलती है, यह होना चाहिए

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
जोड़ा