c# - 如何从表或结果集中获取列名和其他元数据

标签 c# mysql .net ado.net

EX 在“数据”表中

  • 从 moisture 到 end 的列类型是 Boolean
  • 我想将列名的数据为“1”到组合框

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

抱歉我的英语不够好。

pic "Data" table

最佳答案

当您从查询中读取结果集时,使用 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/

关于c# - 如何从表或结果集中获取列名和其他元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840500/

相关文章:

.net - 让 .NET 中的 SlowAES 和 RijndaelManaged 类一起玩

c# - 如何在 Visual Studio 中查找两个 .cs 文件之间的差异

c# - 如何对依赖于控制台的 switch 语句进行单元测试

c# - LINQ 数据上下文不显示方法

mySQL:如何选择每周休息人数较多的日子

php - 婚礼网站RSVP数据库

.net - 如何使用 FxCop 自定义规则验证 DataReader 是否实际关闭?

c# - 路径中的非法字符

c# - 覆盖 C# 集合中的索引返回

mysql - Amazon Web Services - RDS IP 地址和 Tomcat