【问题标题】:Getting MySQL record count with C#使用 C# 获取 MySQL 记录数
【发布时间】: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;

【问题讨论】:

    标签: c# mysql mysql-connector


    【解决方案1】:

    有几件事...

    您将使用的 SQL 语句是:

    从测试中选择 COUNT(*)

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

    例如,在this questionMicrosoft 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 讨厌我:如果结果集很小,则遍历它一次并将行存储在列表中,然后获取计数,然后遍历存储的列表以再次获取所有行。第二次迭代时,您知道您有多少元素,并且您可以做任何您需要在此处计数的操作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-13
        • 2013-05-22
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多