【问题标题】:Operator '<' cannot be applied to operands of type 'object' and 'int'运算符“<”不能应用于“object”和“int”类型的操作数
【发布时间】:2011-12-31 20:40:53
【问题描述】:

我在 ASP.NET 和 C# 中创建了一个用户登录,但是在编写了一个函数后,由于出现错误,我无法编译。错误状态“运算符'

我想检查 ExecuteNonQuery 的返回值是否大于 0。否则登录会失败。

该存储过程是在课程中较早的时候与一个确认的数据库连接字符串一起创建的。

login.aspx.cs

public bool DBConnection(string strUserName, string strPassword)
        {
            SqlCommand myCommand = new SqlCommand("ValidateUser", _productConn);
            myCommand.CommandType = CommandType.StoredProcedure;
            SqlParameter objParam1 = default(SqlParameter);
            SqlParameter objParam2 = default(SqlParameter);
            SqlParameter objReturnParam = default(SqlParameter);
            objParam1 = myCommand.Parameters.Add("@USERNAME", SqlDbType.VarChar);
            objParam2 = myCommand.Parameters.Add("@PASSWORD", SqlDbType.VarChar);
            objReturnParam = myCommand.Parameters.Add("@NUM_OF_USER", SqlDbType.Int);
            objParam1.Direction = ParameterDirection.Input;
            objParam2.Direction = ParameterDirection.Input;
            objReturnParam.Direction = ParameterDirection.ReturnValue;
            objParam1.Value = textUserName.Text;
            objParam2.Value = textPassword.Text;
            try
            {
                if (_productConn.State == ConnectionState.Closed)
                {
                    _productConn.Open();
                    myCommand.ExecuteNonQuery();
                }
                //// ERROR HERE - I Want to check if the return value is greater than 0 ???
                if (objReturnParam.Value < 1)
                {
                    lblMessage.Text = "Invalid Login!";
                }
                else
                {
                    return true;
                }
                _productConn.Close();
            }
            catch (Exception ex)
            {
                lblMessage.Text = "Error Connecting to Database!";
            }
        }

任何帮助都将不胜感激,因为我在这方面迷路了。谢谢。

【问题讨论】:

    标签: c# asp.net operators


    【解决方案1】:

    如果 objReturnParam 为 null,则应使用 TryParse。

    int ReturnID = 0;
    int.TryParse(objReturnParam.Value, ReturnID);
    if(ReturnID > 0)
    {
          .............
    }
    

    【讨论】:

    • 除非 objReturnParam.Value 是一个字符串属性,否则这是行不通的,但我们知道它是一个对象。
    • SqlParameter 的 Value 属性是一个字符串。如果这个转换不起作用,那么 ReturnID 将为零,从而满足 if 语句的要求。
    • 因为 ReturnID 未定义为可空 (int?),所以在转换失败时,该值为 0。
    • OP 的问题和文档(msdn.microsoft.com/en-us/library/ty9hx077.aspx)都表明属性的类型是对象,而不是字符串。顺便说一句,我没有投反对票。
    • @TheGeekYouNeed 代码甚至无法编译,SqlParameter 的 Value 属性是一个对象
    【解决方案2】:

    如上所述,值是对象类型。如果您确信它总是包含一个 int(而不是,例如 DBNull.Value),您可以在比较之前将其转换为 int:

    if ((int)objReturnParam.Value < 1)
    

    【讨论】:

      【解决方案3】:

      你必须转换值,因为它是一个对象

       if (Convert.ToInt32(objReturnParam.Value) < 1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-25
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多