2012-04-13 20 views
-3

わかりました。この時点で、到達不能コードが検出され、if(Session ["UserType"] = 1)がエラーを返すと、型オブジェクトを型boolに暗黙的に変換できないことを示します。どのようにこれを修正するための任意の提案?以下は、全体のコードです: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

関連コードのみを投稿し、不要な空白行を削除してください。 –

+0

これであまりにも多くを削除しました:)前の行には 'break'が含まれていました。 – Vlad

+0

また、 'else'が見つからない可能性があります。 –

答えて

11

問題があなたの代わりに比較する

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

利用==代わりの=次のコードでは、比較の割り当てをやっているということです。

割り当ての結果はintであり、intは暗黙的にC#のboolに変換できません。それが報告されたエラーです。

あなたは===を変更する場合は、intSession["UserType"]の値を比較することはできませんとして、あなたは、別のエラーを取得します。あなたはint

このような​​

にキャストしますが、これは値がintにキャストできることを前提としていることを心に留めておく必要があることをすることができません。そうでない場合は、実行時エラーが発生します。

コードにはまだ他のエラーがあるかもしれませんが、私の精神的なコンパイラが処理できるコードよりも多くのコードが含まれています。

+2

また、セッション変数を 'int'にキャストまたは解析する必要がありますか、間違っていますか? – emd

+1

私はコードに到達したとは思わない。そこにはファンキーな「休憩」があります。 – Mat

+0

変換が必要になる前にemdが言ったように、ENUMを使用していて、別の変換が必要なことがあります。 – MUG4N

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

...は割り当てであり、比較ではありません。

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

あなたの文は、おそらく比較ではない割り当て使用

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

あなたのコードが原因でブレークで到達不能であるべきである場合:あなたは、おそらくに近い何かをしたいです。

0

breakステートメントはwhileループを終了します。それ以下のコードは実行されません。したがって、そのコードに到達できません。