2012-04-13 5 views
-3

Ok, j'ai tout ce qui fonctionne jusqu'à ce que j'arrive à la partie après la pause; À ce stade, le code If indique que le code inaccessible est détecté et if (Session ["UserType"] = 1) donne une erreur indiquant qu'il ne peut pas implicitement convertir l'objet type en type booléen. Des suggestions sur la façon de résoudre ce problème? Ce qui suit est le code entier:Problème de conversion implicite C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Configuration; 


public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected void // ERROR: Handles clauses are not supported in C# 
    btnSubmit_Click(object sender, System.EventArgs e) 
    { 
     if (((string.IsNullOrEmpty(txtUserName.Text)))) 
     { 
      lblErrorMessage.Text = "Username must be entered."; 
      txtUserName.Focus(); 
      return; 
     } 

     string connString = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 
     System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection(connString); 
     string sql = "Select * From TCustomers"; 
     System.Data.SqlClient.SqlDataReader objDR = default(System.Data.SqlClient.SqlDataReader); 
     System.Data.SqlClient.SqlCommand objCmd = new System.Data.SqlClient.SqlCommand(sql, myConnection); 
     myConnection.Open(); 

     objDR = objCmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
     bool blnLogin = false; 
     string strPassword = null; 
     string strUserName = null; 
     strPassword = txtPassword.Text; 
     strPassword = strPassword.Trim(); 
     strUserName = txtUserName.Text; 
     strUserName = strUserName.Trim(); 

     while (objDR.Read()) 
     { 
      if (((objDR["strUserName"].ToString().Trim() == strUserName)) & ((objDR["strPassword"].ToString().Trim() == strPassword))) 
      { 
       blnLogin = true; 
       Session["CustomerID"] = objDR["intCustomerID"]; 
       Session["UserName"] = objDR["strUserName"]; 
       Session["FirstName"] = objDR["strFirstName"]; 
       Session["LastName"] = objDR["strLastName"]; 
       Session["Email"] = objDR["strEmailAddress"]; 
       Session["UserType"] = objDR["intUserTypeID"]; 
       break; 

       if ((blnLogin)) 
       { 
        if(Session["UserType"] = 1) 
        { 
         Response.Redirect("EditAccount.aspx"); 
        } 
        { 
         Session["UserType"] = 2; 
         Response.Redirect("AdminPanel.aspx"); 
        } 
        Response.End(); 
       } 
       else 
       { 
        lblErrorMessage.Text = "Username and/or password is incorrect."; 
       } 
      } 
     } 
    } 
} 
+3

Veuillez ne poster que le code correspondant et supprimer les lignes vides inutiles. –

+0

Maintenant, vous avez supprimé trop :) La ligne précédente contenait un 'break'. – Vlad

+0

Notez également qu'il vous manque probablement un 'else'. –

Répondre

11

Le problème est que vous faites une mission au lieu d'une comparaison dans le code ci-dessous

if(Session["UserType"] = 1) 
{ 
    Response.Redirect("EditAccount.aspx"); 
} 

Utilisation == au lieu de = à comparer.

Le résultat de l'affectation est int et int ne peut pas être implicitement converti en bool en C#. C'est l'erreur signalée.

Si vous changez = vous == obtiendrez une autre erreur, comme vous ne pouvez pas comparer la valeur de Session["UserType"] à un int. Pour ce faire, vous devez le jeter aux int comme celui-ci

if((int)Session["UserType"] == 1) 
{ 
    Response.Redirect("EditAccount.aspx"); 
} 

mais gardez à l'esprit que cela suppose que la valeur peut être jeté à int. Si ce n'est pas le cas, vous obtiendrez une erreur d'exécution.

Il peut toujours y avoir d'autres erreurs dans le code, mais vous avez inclus plus de code que mon compilateur mental peut gérer.

+2

Il doit également lancer ou analyser la variable de session dans un 'int' ou est-ce que je me trompe? – emd

+1

Je ne pense pas que le code est même atteint. Il y a une «pause» funky. – Mat

+0

Eh bien comme emd a dit avant que vous ayez besoin d'une conversion, mais peut-être que vous utilisez un ENUM alors vous avez besoin d'une conversion différente. – MUG4N

6
if(Session["UserType"] = 1) 

... est une affectation, pas une comparaison; Vous voulez sans doute quelque chose de plus près:

if((int)Session["UserType"] == 1) 
1

Votre instruction if devrait probablement être une comparaison pas une cession utiliser

if(Session["UserType"] == 1) 

Votre code est injoignable à cause de la rupture.

0

L'instruction break quittera la boucle while. Le code ci-dessous ne sera pas exécuté. Ainsi, ce code est inaccessible.