count(*)在执行reader时不起作用

时间:2014-06-24 13:21:36

标签: c# mysql asp.net

我试图从一个表中获取所有信息并从另一个表中计数(*)。

这是我的c#代码:

BlogCat = new List<BlogCategory>();

try
{
    using (OdbcConnection connection = new OdbcConnection(ConfigurationManager.ConnectionStrings["MySQLConnStr"].ConnectionString))
    {
        connection.Open();
        using (OdbcCommand command = new OdbcCommand("SELECT c.*, count(pc.id) as 'total' FROM blogcategories c JOIN blogpostcat pc ON pc.cid = c.id", connection))
        using (OdbcDataReader dr = command.ExecuteReader())
        {
            while (dr.Read())
            {
                BlogCat.Add(new BlogCategory((int)dr["id"], (int)dr["parent"], dr["name"].ToString(), (int)dr["total"]));
            }
            dr.Close();
        }
        connection.Close();
    }
}
catch (Exception ex)
{
}

当我在MySQL上运行时,它会向我显示我想要的结果,但是当我执行此处时,它不会向对象添加任何内容。

SELECT c.*
     , count(pc.id)   AS 'total' 
  FROM blogcategories c 
  JOIN blogpostcat    pc 
    ON pc.cid = c.id

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

我猜你的SQL字符串与你在MySQL中执行的字符串不同。

SELECT c.*, count(pc.id) as 'total' 
FROM blogcategories c 
JOIN blogpostcat pc ON pc.cid = c.id

没有group by,但你使用聚合函数count(pc.id),但也查询其他字段 语法完全错误。
看看你的代码。
你有一个关于C#例程的try-catch,并且不记录错误...

尝试

catch (Exception ex)
{
     Console.WriteLine(ex.Message);
}

进行更改。

在执行

之前,还应检查连接状态是否未打开
connection.Open();

(池)

也是如此
connection.Close();

也可以尝试

System.Convert.ToInt32(dr["your_field"])

而不是

(int)dr["your_field"]

我也会用

System.Convert.ToString(dr["name"])

而不是

dr["name"].ToString()