2013-06-24 26 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转换失败。