【问题标题】:How to get column names and other metadata from a table or resultset如何从表或结果集中获取列名和其他元数据
【发布时间】:2014-09-10 12:09:18
【问题描述】:

EX 在“数据”表中

  • 从水分到末端的列类型是布尔型
  • 我想获取组合框的数据为“1”的列名

具体来说,对于我的结果集的每一行,我需要一个包含值 1 的列名的集合,以便我可以填充一个组合框。

对不起,我的英语不够好。

pic "Data" table

【问题讨论】:

  • 我相信您问的是如何在 C#/.net 中编写一个程序,从 MySQL 结果集中检索有关列名和列数据类型的信息。那是对的吗?无论如何,phpmyadmin与这个问题无关。
  • 欢迎使用stackoverflow,你想用c#从mysql中读取特定数据并加载到combobox吗?
  • 是的,我想获取列名的数据为“1”到组合框

标签: c# mysql .net ado.net


【解决方案1】:

当您从查询中读取结果集时,使用 MySQL .net 连接器(和任何 RDMS 连接器),您将拥有一个 DataReader 对象。在 MySQL 的情况下,它是一个 MySqlDataReader。

例如(来自https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-sql-command.html

       string sql = "SELECT * FROM data";
       MySqlCommand cmd = new MySqlCommand(sql, conn);
       MySqlDataReader rdr = cmd.ExecuteReader();

       while (rdr.Read())
       {
            /* iterate once per row */
            Console.WriteLine(rdr[0]+" -- "+rdr[1]); /* or whatever */
       }
       rdr.Close();

一旦您拥有一个有效的 DataReader,您就可以使用GetSchemaTable() 方法来获取描述结果集的DataTable 数据集合。此信息来自 MySQL 作为结果集的一部分。例如:

       MySqlDataReader rdr = cmd.ExecuteReader();
       DataTable schema = rdr.GetSchemaTable();

DataTable 包含结果集中每一列的一行。您可以像这样访问有关结果集中列的有用信息:

        foreach (DataRow rdrColumn in schema.Rows) {
            String columnName = rdrColumn[schema.Columns["ColumnName"]].ToString();
            String dataType = rdrColumn[schema.Columns["DataType"]].ToString();    
        }

还有名为ColumnSizeNumericPrecisionNumericScale 等的项目。如果需要,它们中的每一个都可用于结果集中的每一列。

编辑 您可以制作一个包含结果集列名称的字典,如下所示:

        Dictionary<int,String> columnNames = new Dictionary<int,string>();
        int index = 0;
        foreach (DataRow row in schema.Rows) {
            columnNames.Add(index,row[schema.Columns["ColumnName"]].ToString());
            index++;
        }

之后,当您遍历行时,您可以按名称创建具有特定行值的列列表。

        while (rdr.Read()) {
            /* for each row */
            List<String> listOfColumns = new List<string>();

            for (int i = 0; i < rdr.FieldCount; i++) {
                var val = rdr[i];
                if ("1" == val) {
                    /* if the value of the column is 1, add the column name from the dictionary */
                    listOfColumns.Add(columnNames[i]);
                }
            }
        }

有关查看结果集元数据的示例,请参见此处。 https://etutorials.org/Programming/ado+net/Part+I+ADO.NET+Tutorial/Chapter+5.+DataReaders/5.4+DataReaders+and+Schema+Information/

【讨论】:

  • 是的,我可以得到列名,谢谢。但是如何获取列名有数据是“1”
【解决方案2】:

此查询将帮助您DESCRIBE my_table;

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

请参阅 clink 以获得更多说明:https://dev.mysql.com/doc/refman/8.0/en/show-columns.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多