不同的mysql Count返回值

时间:2013-05-07 03:42:28

标签: c# mysql database count

我有以下查询

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 个答案:

答案 0 :(得分:3)

您需要执行Executescalar方法

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

ExecuteNonQuery仅返回受影响的行数。

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

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

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

答案 1 :(得分:0)

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