C#隐式转换问题

时间:2012-04-13 16:25:00

标签: c#

好的,我有整个工作,直到我在休息后到达部分;此时,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 个答案:

答案 0 :(得分:11)

问题是你在下面的代码中进行了分配而不是比较

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

使用==代替=进行比较。

分配结果为intint无法在C#中隐式转换为bool。这是报告的错误。

如果您将=更改为==,则会收到其他错误,因为您无法将Session["UserType"]的值与int进行比较。要做到这一点,你需要把它投射到这样的int

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

但请记住,这假定值可以转换为int。如果不是这种情况,您将收到运行时错误。

代码中可能还有其他错误,但您包含的代码多于我的mental编译器可以处理的代码。

答案 1 :(得分:6)

if(Session["UserType"] = 1)

...是一项任务,而非比较;你可能想要更接近的东西:

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

答案 2 :(得分:1)

您的if语句应该是比较而不是作业使用

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

由于中断,您的代码无法访问。

答案 3 :(得分:0)

break语句将退出while循环。它下面的代码不会执行。因此,该代码无法访问。