2013-05-07 76 views
0

我有以下查詢不同的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

回答

3

您需要執行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

0

您正在使用MySQLClient.ExecuteNonQuery執行查詢ExecuteNonQuery用於運行諸如INSERTUPDATE語句的事件,而不是SELECT。正因爲如此,你不會影響任何行,並得到-1的結果。您需要執行查詢,以便返回結果集,以便從中讀取count (*) COLUMN_NAME的值。