不同的MySQL计数返回值

问题描述:

我有以下查询不同的MySQL计数返回值

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

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

+0

“..它返回2列”,列或行? – Nalaka526 2013-05-07 03:48:42

+0

@nalaka它返回2列。 NIK和密码 – Cignitor 2013-05-07 10:49:06

您需要执行Executescalar方法

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

ExecuteNonQuery只返回受影响的行数。

Executescalar回报,如果你需要有关转换值从ExcureScalar返回更多信息,请检查下面的查询

返回的结果集的第一行的第一列,这样回答

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

+0

你在第一个问题:D – Adrian 2013-05-07 03:54:00

+0

执行标量返回错误,因为不能将对象隐式转换为int – Cignitor 2013-05-07 10:47:12

+0

是的,你需要将它转换为int值。执行标量返回对象值 – Damith 2013-05-07 10:52:58

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