使用 C# 获取 MySQL 记录数

Posted

技术标签:

【中文标题】使用 C# 获取 MySQL 记录数【英文标题】:Getting MySQL record count with C# 【发布时间】:2011-02-17 22:25:46 【问题描述】:

我想知道如何使用 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;

【问题讨论】:

【参考方案1】:

有几件事...

您将使用的 SQL 语句是:

从测试中选择 COUNT(*)

但是,当使用 MySQL 连接器/网络 通过 C# 连接到 MySQL 时,在处理查询结果时需要注意。

例如,在this question 和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】:

我使用的是 SELECT COUNT(*) 并希望返回 int。你可能需要这个来获得一个可用的值:

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

【讨论】:

【参考方案3】:

您可以先运行另一个查询来获取计数:

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

但实际上,您可能最好更改问题,以便在填充列表之前不需要计数。

【讨论】:

您不应该运行比您需要的更多的查询。这样做会使应用程序运行得更慢一些。您可以通过一个查询来做到这一点。【参考方案4】:

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

【讨论】:

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

以上是关于使用 C# 获取 MySQL 记录数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 元数据:获取查询语句影响的记录数

如何在 MySQL 中获取记录数以及最小值/最大值?

sql 获取MySQL中的所有表,记录数和大小(MB)

c# foreach 没有在循环中获取下一个 XElement 名称

什么是MySQL 元数据

如何在 C# 中使用 agsXMPP 获取聊天记录