我试图从一个表中获取所有信息并从另一个表中计数(*)。
这是我的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
我该如何做到这一点?
答案 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()