2010-05-11 134 views
1

我想知道如何獲取C#查詢的記錄數。使用C#獲取MySQL記錄計數

這裏是我使用的代碼..

MySqlDataReader recordset = null; 
    query = new MySqlCommand("SELECT * FROM test ORDER BY type_ID ASC", this.conn); 
    recordset = query.ExecuteReader(); 


    while (recordset.Read()) 
    { 
     result.Add(recordset["type_ID"].ToString()); 

    } 
    return result; 

回答

7

我當時在使用SELECT COUNT(*),預計會返回int。您可能需要它來獲取可用值:

mysqlint = int.Parse(query.ExecuteScalar().ToString()); 
1

你在result添加新元素的每一行。根據result的類型,您應該能夠在while循環完成後執行類似result.Count的操作。

+0

不幸的是,我必須在while()循環之前得到行計數... – 2010-05-11 00:14:20

+2

@she討厭我:只是好奇,但爲什麼你會需要行循環之前的行數? – Pandincus 2010-05-11 00:16:52

+0

@she討厭我:如果結果集很小,遍歷它一次並將行存儲在一個列表中,然後獲得計數,然後遍歷存儲列表再次獲取所有行。第二次你迭代你知道你有多少元素,你可以做任何你需要在這裏計數的事情。 – 2010-05-11 20:54:37

1

你可以先運行另一個查詢來獲取計數:

query = new MySqlCommand("SELECT count(*) as theCount FROM test ORDER BY type_ID ASC", this.conn); 

但說實話,你可能是最好的改變問題,所以你不會需要計數,直到您填充列表之後。

+0

您不應該運行比您需要更多的查詢。這樣做會使應用程序運行速度更慢。你可以用一個查詢來做到這一點。 – ShoeLace1291 2016-12-23 14:52:54

1

幾件事情......

你可以使用SQL語句爲:

SELECT COUNT(*)FROM測試

但是,當使用MySQL Connector/Net通過C#連接到MySQL時,在處理查詢時需要注意結果。

例如,如在this questionMicrosoft Connectint.Parse("0")等效地稱爲Int32.Parse("0")可以在某些機器上拋出FormatException引用。

我發現Convert.ToInt32很好地處理這種情況。

所以,你的代碼將是這樣的:

using (var conn = new MySqlConnection(cs)) 
{ 
    conn.Open(); 
    using (var cmd = new MySqlCommand("SELECT COUNT(*) FROM test", conn)) 
    { 
     int count = Convert.ToInt32(cmd.ExecuteScalar()); 
     return count; 
    } 
} 

記住using語句,以確保MySQL的對象得到妥善處理,以利用