-3

わかりました、休憩の後の部分に到達するまで、すべてが機能しています。この時点で、If は到達不能コードが検出されたことを示し、if(Session["UserType"] = 1) は型オブジェクトを暗黙的に型 bool に変換できないというエラーを返します。これを修正する方法について何か提案はありますか? 以下はコード全体です。

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.";
                }
            }
        }
    }
}
4

4 に答える 4

11

問題は、以下のコードで比較ではなく割り当てを行っていることです

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

比較する==代わりに使用します。=

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

に変更=すると、 の値をと==比較できないため、別のエラーが発生します。そのためには、このようにキャストする必要がありますSession["UserType"]intint

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

ただし、これは値を にキャストできることを前提としていることに注意してintください。そうでない場合は、実行時エラーが発生します。

コードにはまだ他のエラーがあるかもしれませんが、私のメンタル コンパイラが処理できる以上のコードが含まれています。

于 2012-04-13T16:28:12.383 に答える
6
if(Session["UserType"] = 1)

...は割り当てであり、比較ではありません。おそらく、次のようなものが必要です。

if((int)Session["UserType"] == 1)
于 2012-04-13T16:29:04.053 に答える
1

あなたの if ステートメントは、おそらく代入ではなく比較である必要があります

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

中断のため、コードに到達できません。

于 2012-04-13T16:30:14.220 に答える
0

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

于 2012-04-13T16:31:11.663 に答える