2013-06-24 33 views
5

tôi cố gắng để có được số lượng hàng từ một bảng với điều này:MySql có được số hàng

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

Và tôi có được ngoại lệ:

Specified cast is not valid. 

Bất kỳ ý tưởng làm thế nào tôi có thể sửa chữa nó?

+1

sử dụng trình gỡ lỗi để xem loại 'cmd.ExecuteScalar();' thực sự trả về – Matthew

+0

Bạn đang sử dụng phiên bản MySQL nào? –

Trả lời

15

Hãy thử

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

+1 - Tôi tin rằng chức năng 'COUNT' trong máy chủ MySQL trả về một giá trị dài (BIGINT) theo mặc định, do đó, đó là những gì được trả về từ ExecuteScalar. Giả sử bảng có ít hơn 2 tỷ hàng hoặc hơn, điều này sẽ an toàn. –

+0

@EricPetroelje hy vọng hoàn toàn ... vượt qua ngón tay: D – MDMalik

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

EDIT này: Make cũng chắc chắn để xử lý ngoại lệ trong mã của bạn (Ví dụ: nếu có SQL Lỗi kết nối). (!) Ngoài ra, nếu nó không phải là một COUNT(*) giá trị trả về bởi ExecuteScalar()có thể được null

1

Nếu bạn muốn sử dụng các diễn viên, bạn có thể sử dụng:

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

Như đã đề cập ở trên, COUNT trong MySql trả về BIGINT, do đó đúc với một int không thành công.

Các vấn đề liên quan