2013-06-24 31 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 - 我相信MySQL服務器中的COUNT函數默認返回一個long(BIGINT),所以這是從ExecuteScalar返回的。假設表格的行數少於20億左右,這應該是安全的。 –

+0

@EricPetroelje希望完全...手指交叉:D – MDMalik

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

編輯:同時也要確保在你的代碼(例如,如果有SQL連接錯誤)來處理異常。 (!) 此外,如果它不是一個COUNT(*)通過ExecuteScalar()的返回值可以爲空

1

如果您想使用的轉換,你可以使用:

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

如上所述,COUNT在MySql返回BIGINT,因此用int轉換失敗。