2013-09-24 5 views
0

내 저장 프로 시저가 임의의 행을 선택하는 경우에만 표시하고 싶습니다.저장 프로 시저의 executeScalar

using (var conn = new System.Data.SqlClient.SqlConnection(
        "Data Source=DANIEL-DATOR;Initial Catalog=EvaluationTest;Integrated Security=True")) 
     using (var command = new SqlCommand("countRecords", conn)) 
     { 
      conn.Open(); 
      command.Parameters.Add(new SqlParameter("@usermail", prop.Sendmail)); 
      command.CommandType = CommandType.StoredProcedure; 

      int userCount = (int)command.ExecuteScalar(); 
      conn.Close(); 


      if (userCount > 0) 
      { 
       return 1; 
      } 

       return 2; 

코드에서이 오류가 발생합니다. System.InvalidCastException : 지정된 캐스트가 유효하지 않습니다. 내가 뭘 잘못 했니?

답변

0

ExecuteScalar는 결과 집합이 비어 있으면 null을 반환하고 그렇지 않으면 null을 반환합니다. 이 함수가 작동하는 방식은 반환 된 데이터의 첫 번째 행의 첫 번째 열 값을 사용한다는 것입니다.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

그것은 당신의 저장 프로 시저 아무것도 전혀 반환하지 않는 경우이어야합니다 결과가 null인지 확인해야합니다.

var result = command.ExecuteScalar(); 
if (result!=null) 
{ 
    //you got some data 
    Int32.TryParse(result.ToString, out userCount); 
    return user Count>0?1:2; 
}