MySQL查询使用列名检索数据

时间:2011-07-10 17:22:24

标签: c# .net mysql sql

我正在编写一些工具,当应用任何查询时,必须检索检索到的数据集的列名。

如果您熟悉phpMyAdmin,您会意识到SQL窗格会执行查询运行的内容并显示列名称的结果。我想知道查询有多难,它总是会产生列名,实际上是场景背后的编程?是这样,它分析查询,然后从中查找表名,然后首先使用查询show columns from table-name检索列名,然后检索数据?

还有更好的方法吗?

已更新 对不完整的信息感到抱歉,我想我必须说我正在使用.NET连接器并使用C#。

5 个答案:

答案 0 :(得分:5)

您的列是您在c#

中加载的DataReader或DataTable的元数据的一部分

MSDN获取DataTable:

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,请参阅Can you get the column names from a SqlDataReader?

答案 1 :(得分:4)

我使用以下代码解决了我的问题。

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 :(得分:2)

您可以使用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方法。INFORMATION_SCHEMA.COLUMNS等同于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']

答案 3 :(得分:1)

您需要一种与phpMyAdmin相同的编程语言。您可以使用mysql_fetch_assoc()

它将返回一行数据,其中每个元素都具有键的列名称:

PHP解决方案

array(
  [0] => array(
    [id] => 1,
    [name] => 'Test name'
  ),
  [1] => array(
    [id] => 2,
    [name] => 'Name 2'
  )
)

答案 4 :(得分:0)

如果你有确定的列数,你可以在纯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`)