2013-05-07 3 views
0

У меня есть следующий запросРазличные MySQL Возвращаемое значение Count

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

и выполнять их на тузд 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

+0

@ nalaka возвращает 2 столбца. NIK и пароль – Cignitor

ответ

3

вам нужно выполнить Executescalar методы

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

ExecuteNonQuery возвращения влияет только количество строк.

Но Executescalar возвращает первый столбец первой строки в наборе результатов, возвращенного запросом

, если Вам необходима дополнительная информация о литье значение, возвращение из ExcureScalar пожалуйста, проверьте ниже SO ответы

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

+0

У вас есть в первую очередь: D – Adrian

+0

executescalar return error, потому что не может неявно преобразовывать объект в int – Cignitor

+0

yes, вам нужно преобразовать его в значение int. Значение возвращаемого объекта executescalar – Damith

0

Вы используете MySQLClient.ExecuteNonQuery для выполнения запроса ExecuteNonQuery используется для запуска таких вещей, как INSERT или UPDATE, а не SELECT. Из-за этого вы не влияете на какие-либо строки и получаете результат -1. Вы должны выполнить запрос таким образом, чтобы получить результат, который вы можете прочитать с вашего count (*) COLUMN_NAME.

Смежные вопросы