2013-09-24 3 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, если набор результатов пуст; помните, что способ работы этой функции заключается в том, что она принимает значение первого столбца первой строки возвращаемых данных.

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

Это должно быть так, что ваша хранимая процедура не возвращает вообще ничего; поэтому вы должны проверить, является ли результат пустым:

var result = command.ExecuteScalar(); 
if (result!=null) 
{ 
    //you got some data 
    Int32.TryParse(result.ToString, out userCount); 
    return user Count>0?1:2; 
} 
Смежные вопросы