使用C#获取MySQL记录数

5

我想知道如何使用C#获取查询结果的记录数。

这是我使用的代码:

    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;
4个回答

15

我使用了SELECT COUNT(*),期望返回一个int。你可能需要这个来获取可用的值:

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

6

有几件事情...

您需要使用的SQL语句是:

SELECT COUNT(*) FROM test

但是,当使用MySQL Connector/Net通过C#连接到MySQL时,在处理查询结果时需要注意一些问题。

例如,如此问题Microsoft Connect上所述,int.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对象能够被正确处理。


2
你正在为每一行添加一个新的元素到result中。根据result的类型,当while循环完成后,你应该能够执行类似result.Count的操作。

2
@她讨厌我:只是好奇,但为什么你需要在循环之前知道行数? - Pandincus
如果结果集很小,可以遍历一次并将行存储在列表中,然后获取计数,然后再次遍历存储的列表以再次获取所有行。第二次遍历时,您知道有多少元素,并且可以在此处执行需要计数的任何操作。@she hates me - Mark Byers

1
你可以先运行另一个查询来获取计数:
query = new MySqlCommand("SELECT count(*) as theCount FROM test ORDER BY type_ID ASC", this.conn);

但实际上,你最好改变问题,直到填充列表后才需要计数。


不应该运行比所需更多的查询。这样做会使应用程序运行得更慢一些。您可以使用一个查询来完成此操作。 - ShoeLace1291

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接