MySQL Query для получения данных с именами столбцов - PullRequest
5 голосов
/ 10 июля 2011

Я пишу какой-то инструмент, который должен извлекать имена столбцов извлеченного набора данных, когда к нему применяется какой-либо запрос.

Если вы знакомы с phpMyAdmin, вы поймете, что панель SQL выполняет то,он запускает ваш запрос и показывает результат с именами столбцов.Интересно, насколько сложным будет запрос, он всегда приводит к именам столбцов и что на самом деле программирует за сценой?Похоже, он анализирует запрос, а затем находит из него имена таблиц, а затем сначала получает имена столбцов, используя запрос show columns from table-name, а затем данные?

Есть ли лучший способ?

ОБНОВЛЕНО Извините за неполную информацию, я должен сказать, что использую MySQL-коннектор для .NET и использую C #.

Ответы [ 5 ]

5 голосов
/ 10 июля 2011

Ваши столбцы являются частью метаданных DataReader или DataTable, которые вы загружаете в c #

С MSDN для таблицы данных:

private void PrintColumnNames(DataSet dataSet)
{
    // For each DataTable, print the ColumnName.
    foreach(DataTable table in dataSet.Tables)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(column.ColumnName);
        }
    }
}

Для DataReader см. Можете ли вы получить имена столбцов из SqlDataReader?

4 голосов
/ 10 июля 2011

Я решил проблему, используя следующий код.

var QueryCommand = new MySqlCommand(txtQuery.Text, Connection);
var ResultReader = QueryCommand.ExecuteReader();

for (var f = 0; f < ResultReader.FieldCount; f++)
{
   ResultGrid.Columns.Add("column" + f, ResultReader.GetName(f));
}
2 голосов
/ 10 июля 2011

вы можете использовать SHOW COLUMNS

mysql> SHOW COLUMNS FROM City;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name       | char(35) | NO   |     |         |                |
| Country    | char(3)  | NO   | UNI |         |                |
| District   | char(20) | YES  | MUL |         |                |
| Population | int(11)  | NO   |     | 0       |                |
+------------+----------+------+-----+---------+----------------+

См .: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html

Но INFORMATION_SCHEMA - это средство ANSI для определения столбцов, таблиц, ограничений и т. Д.КОЛОННЫ эквивалентны SHOW COLUMNS:

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name LIKE 'wild']
1 голос
/ 10 июля 2011

Вам нужен язык программирования для того же, что и phpMyAdmin. Вы можете использовать mysql_fetch_assoc()

Будет возвращена строка данных, в которой каждый из элементов будет иметь для ключа имя столбца:

PHP решение

array(
  [0] => array(
    [id] => 1,
    [name] => 'Test name'
  ),
  [1] => array(
    [id] => 2,
    [name] => 'Name 2'
  )
)
0 голосов
/ 10 июля 2011

если вы определили количество столбцов, вы можете сделать это в чистом mysql.Например для 3 столбца:

(select 
max(f1), max(f2), max(f3)
from (
select 
IF(ordinal_position=1,column_name,0) AS f1,
IF(ordinal_position=2,column_name,0) AS f2,
IF(ordinal_position=3,column_name,0) AS f3
from information_schema.columns where table_name='t') tt)
union
(select * from `t`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...