7

我正在用 C#.NET 编写程序我想收集一个类的总频率(假设每个类都有很多单词,每个单词在相应的类中都有自己的频率)

所以我在mysql中使用了sum()函数。但是有一个错误说我的演员表是错误的。

 public void average_each_type()
        {
            MySqlDataReader result;
            int total_freq = 0;
            string type = "";

            command.CommandText = "select class_name ,SUM(frequency) as sum_of_freq from training_set group by class_name ";


                result = command.ExecuteReader();
                while (result.Read())
                {

                    total_freq = (int)result["sum_of_freq"]; //error happened here
                    type = result["class_name"].ToString();
                    //.....then so on...//
4

2 回答 2

10

MySql 中的 SUM 将返回一个小数或双精度值,具体取决于“频率”内的类型。从SUM 的文档中

SUM() 和 AVG() 函数为精确值参数(整数或 DECIMAL)返回一个 DECIMAL 值,为近似值参数(FLOAT 或 DOUBLE)返回一个 DOUBLE 值。(在 MySQL 5.0.3 之前,SUM() 和 AVG() 为所有数字参数返回 DOUBLE。)

如果您想要一个整数,Convert无论​​源类型是什么,您都可以使用它来获取:

total_freq = Convert.ToInt32(result["sum_of_freq"]);

这里的优点是无论从数据库返回什么类型的值, Convert.ToInt32都可以工作,只要它是数字类型。

于 2012-05-14T23:56:08.243 回答
5

除了 Reed 所说的之外,您还可以在 SQL 中进行整数转换:

CAST(SUM(frequency) as INT) as sum_of_freq
于 2012-10-24T12:13:55.227 回答