C# 为什么mysql中的count命令返回错误的值-1?

C# 为什么mysql中的count命令返回错误的值-1?,c#,google-cloud-sql,sqlcommand,C#,Google Cloud Sql,Sqlcommand,我正在使用gcloudmysql,并使用c插入值和内容。 我正在尝试获取表类别中的记录数量。我的代码是: 但在执行之后,x等于-1,这是错误的。可能是什么 MySqlCommand count_categories = new MySqlCommand( "SELECT COUNT(CategoryId) FROM Categories_tbl;", connection); x = count_categories.ExecuteNonQuery(); 这不是一个非查询,这是一

我正在使用gcloudmysql,并使用c插入值和内容。 我正在尝试获取表类别中的记录数量。我的代码是: 但在执行之后,x等于-1,这是错误的。可能是什么

MySqlCommand count_categories = new MySqlCommand(
  "SELECT COUNT(CategoryId) FROM Categories_tbl;", 
   connection);

x = count_categories.ExecuteNonQuery();

这不是一个非查询,这是一个查询,您希望得到以下结果:

x = count_categories.ExecuteScalar();
因为我不知道你的x是什么类型,你可能需要把它转换成正确的类型。

好吧

count_categories.ExecuteNonQuery();
返回受影响的记录数;您不调用insert、update、delete,因此您有-1。改为

x = count_categories.ExecuteScalar();
它执行查询并返回单个结果。另一个更冗长的可能性

using (var reader = count_categories.ExecuteReader()) {
  if (reader.Read())
    x = Convert.ToInt32(reader[0]); // if you want int as a result
  else {
    // cursor is empty
  }
} 
编辑:如果要读取多条记录,可以使用该选项,例如

List<Category> list = new List<Category>(); 

using (var reader = count_categories.ExecuteReader()) {
  while (reader.Read()) {
    //TODO: put the right syntax here
    Category category = new Category() {
      Name = Convert.ToString(reader["Name"]),
    };  

    list.Add(category);
  }
}

x=计数\类别。执行计算器;非常感谢。另一个问题-如果我想从SELECT*G=from Categories\u tbl;作为列表-我能做什么?在这种情况下,你应该使用count_categories.ExecuteReaderi,这是我的代码:MySqlCommand select_all_categories=new MySqlCommandSELECT*FROM categories_tbl,connection;使用var reader=select_all_categories.ExecuteReader{if reader.Read return Listreader[0];//if you want int as result}但我得到的错误是无法从字符串转换为列表。您必须使用while,而不是for,创建每个类别实例并将其放入列表中查看我的答案