EX 在“数据”表中
- 从 moisture 到 end 的列类型是 Boolean
- 我想将列名的数据为“1”到组合框
具体来说,对于我的结果集的每一行,我需要一个包含值 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();
}
还有名为 ColumnSize
、NumericPrecision
、NumericScale
等的项。如果您需要,这些中的每一个都可用于结果集中的每一列。
编辑 您可以创建一个包含结果集列名称的字典,如下所示:
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/