0

我有以下查询

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;
    }

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

4

2 回答 2

3

你需要执行Executescalar方法

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

ExecuteNonQuery仅返回受影响的行数。

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

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

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

于 2013-05-07T03:52:41.160 回答
0

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

于 2013-05-07T03:53:23.153 回答