【问题标题】:Different mysql Count return value不同的mysql Count返回值
【发布时间】:2013-05-07 03:42:27
【问题描述】:

我有以下查询

SELECT count( * ) COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'ptbs.ms_karyawan'

并在 mysql wamp 上执行它们,它返回 2 列

但是,当我使用 C# 执行上面的查询时,它返回 -1 列,这是代码

  private void button1_Click(object sender, EventArgs e)
    {
        int table = dbc.Count("ptbs.ms_karyawan");
        msg.Sukses("Jumlah table adalah :"+table, "Login");
    }

这里是dbc.count() 代码

  public int Count(string table_name)
    {
        string query = "SELECT count( * ) COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = '"+table_name+"'";
        int table = 0;

        if (OpenConnection() == true)
        {
            //create mysql command
            MySqlCommand cmd = new MySqlCommand();

            //Assign the query using CommandText
            cmd.CommandText = query;

            //Assign the connection using Connection
            cmd.Connection = connection;

            //Execute query
            table = cmd.ExecuteNonQuery();

            //close connection
            this.CloseConnection();                             
        }
        return table;
    }

为什么他们返回不同的值,虽然我使用相同的查询?我做错了什么 ?

【问题讨论】:

  • ".. 它返回 2 列",列还是行?
  • @nalaka 它返回 2 列。 NIK 和密码

标签: c# mysql database count


【解决方案1】:

你需要执行Executescalar方法

var retVal = cmd.Executescalar(); 
table = Convert.ToInt32(retVal);

ExecuteNonQuery 仅返回受影响的行数。

但是Executescalar返回查询返回的结果集中第一行的第一列

如果您需要有关从 ExcureScalar 返回的转换值的更多信息,请查看以下 SO 答案

Int32.TryParse() or (int?)command.ExecuteScalar()

【讨论】:

  • 执行标量返回错误,因为无法将对象隐式转换为int
  • 是的,您需要将其转换为 int 值。执行标量返回对象值
【解决方案2】:

您正在使用MySQLClient.ExecuteNonQuery 执行查询ExecuteNonQuery 用于运行诸如INSERTUPDATE 语句之类的东西,而不是SELECT。因此,您不会影响任何行,并获得 -1 的结果。您需要以这样的方式执行查询,以获取返回的结果集,以便您可以从中读取 count ( * ) COLUMN_NAME 的值。

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 2011-02-27
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2014-02-15
    相关资源
    最近更新 更多