2013-06-24 21 views
5

próbuję uzyskać liczbę wierszy z tabeli z tym:MySql uzyskać liczbę wierszy

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

i pojawia się wyjątek:

Specified cast is not valid. 

jakiś pomysł jak mogę to naprawić?

+1

użyj debuggera, aby zobaczyć, jaki typ 'cmd.ExecuteScalar();' faktycznie zwraca – Matthew

+0

Jaką wersję MySQL używasz? –

Odpowiedz

15

Spróbuj

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

+1 - Wierzę, że funkcja 'COUNT' na serwerze MySQL zwraca domyślnie wartość long (BIGINT), więc jest to wartość zwracana przez ExecuteScalar. Zakładając, że tabela ma mniej niż 2 miliardy wierszy, powinno to być bezpieczne. –

+0

@EricPetroelje nadzieję w pełni ... palec wskazujący: D – MDMalik

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

EDIT: Upewnij się także do obsługi wyjątków w kodzie (np jeśli nie ma połączenia SQL Error). (!) Ponadto, jeśli to nie jest COUNT(*) wartość zwracana przez ExecuteScalar()może być null

1

Jeśli chcesz korzystać z obsady, można użyć:

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

Jak wspomniano powyżej, liczy się w MySql zwraca BIGINT, więc rzutowanie z int kończy się niepowodzeniem.

Powiązane problemy