2011-11-18 6 views
3

ASP.NET 및 C#에서 사용자 로그인을 만들고 있지만 오류로 인해 컴파일 할 수 없습니다. "연산자 '<'을 'object'및 'int'유형의 피연산자에 적용 할 수 없습니다."연산자 '<'를 'object'및 'int'유형의 피연산자에 적용 할 수 없습니다.

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!"; 
      } 
     } 

어떤 도움이 많이 주시면 감사하겠습니다. 감사.

답변

18

당신은 그것을 objReturnParam가 null 인 경우 객체

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

감사합니다. 나는 이것이 다음과 같은 간단한 것임을 알고 있습니다 ... – HGomez90

-1

때문에 값을 캐스팅해야합니다, 당신은 TryParse를 사용해야합니다.

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

objReturnParam.Value가 문자열 속성이지만, 객체임을 알지 않으면 작동하지 않습니다. – phoog

+0

SqlParameter의 Value 속성은 문자열입니다. 이 변환이 작동하지 않으면 ReturnID가 0이되어 if 문의 요구 사항을 충족시킵니다. – TheGeekYouNeed

+0

ReturnID가 nullable (int?)로 정의되지 않았기 때문에 변환 실패시 값은 0입니다. – TheGeekYouNeed

4

값은 형식 개체와 같습니다. 항상 int가 포함되어 있고 (예 : DBNull.Value가 아닌 경우) 비교 전에 int로 캐스팅 할 수 있습니다.

if ((int)objReturnParam.Value < 1) 
관련 문제