使用 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 记录数的主要内容,如果未能解决你的问题,请参考以下文章