2013-06-24 11 views
5

cerco di ottenere il numero di righe da una tabella con questo:MySql ottenere il numero di righe

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

e ottengo l'eccezione:

Specified cast is not valid. 

Qualsiasi idea di come posso risolvere il problema?

+1

usa il debugger per vedere che tipo 'cmd.ExecuteScalar();' restituisce effettivamente – Matthew

+0

Quale versione di MySQL stai usando? –

risposta

15

Prova questa

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

+1 - Credo che la funzione 'COUNT' nel server MySQL restituisca un lungo (BIGINT) per impostazione predefinita, quindi questo è ciò che viene restituito da ExecuteScalar. Supponendo che il tavolo abbia meno di 2 miliardi di file, questo dovrebbe essere sicuro. –

+0

@EricPetroelje spero pienamente ... incrociamo le dita: D – MDMalik

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

EDIT: anche assicurarsi per gestire le eccezioni nel codice (ad esempio se c'è SQL Errore di connessione). (!) Inoltre, se non è un COUNT(*) il valore restituito da ExecuteScalar()può essere nullo

1

Se si desidera utilizzare il cast, è possibile utilizzare:

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

Come accennato in precedenza, COUNT in MySql restituisce BIGINT, quindi il casting con un int fallisce.

Problemi correlati