2013-06-24 27 views
5

я стараюсь, чтобы получить количество строк из таблицы с этим:MySql получить количество строк

 string commandLine = "SELECT COUNT(*) FROM client"; 

     using (MySqlConnection connect = new MySqlConnection(connectionStringMySql)) 
     using (MySqlCommand cmd = new MySqlCommand(commandLine, connect)) 
     { 
      connect.Open(); 

      int count = (int)cmd.ExecuteScalar(); 

      return count; 
     } 

И я получаю исключение:

Specified cast is not valid. 

Любая идея, как я могу это исправить?

+1

использовать отладчик, чтобы узнать, какой тип 'cmd.ExecuteScalar();' фактически возвращает – Matthew

+0

. Какую версию MySQL вы используете? –

ответ

15

Попробуйте

using (MySqlCommand cmd = new MySqlCommand(commandLine, connect)) 
{ 
    connect.Open(); 
    return Convert.ToInt32(cmd.ExecuteScalar()); 
} 
+2

+1 - Я считаю, что функция 'COUNT' на сервере MySQL возвращает длинный (BIGINT) по умолчанию, так что это то, что возвращается из ExecuteScalar. Предполагая, что таблица содержит менее 2 миллиардов строк, это должно быть безопасным. –

+0

@ EricPetroelje надеется полностью ... скрещенное пальцем: D – MDMalik

2
using (MySqlCommand cmd = new MySqlCommand(commandLine, connect)) 
{ 
     connect.Open(); 
     return Convert.ToInt32(cmd.ExecuteScalar()); 
} 

EDIT: Кроме того, убедитесь, чтобы обрабатывать исключения в коде (например, если есть SQL ошибка соединения). (!) Кроме того, если это не COUNT(*) значение, возвращаемое ExecuteScalar()может быть пустым

1

Если вы хотите использовать бросок, вы можете использовать:

long count = (long)cmd.ExecuteScalar(); 

Как уже упоминалось выше, COUNT в MySql возвращает BIGINT, поэтому кастинг с int не выполняется.