如何从表或结果集获取列名和其他元数据
本文关键字:其他 元数据 获取 结果 | 更新日期: 2023-09-27 18:13:52
EX In "Data"表
- 从湿度到末端为布尔型
- 我想得到列名称有数据是"1"到组合框
具体来说,对于结果集的每一行,我需要一个包含值1
的列名称的集合,这样我就可以填充一个组合框。
对不起,我的英语不够好。
pic "Data"表
使用MySQL .net连接器(以及任何RDMS连接器)从查询中读取结果集时,您将拥有一个DataReader对象。在MySQL的情况下,它是一个MySqlDataReader。
例如(from 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,如下所示:
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]);
}
}
}
查看结果集元数据的示例见这里。ADO.NET https://etutorials.org/Programming/ado + net/Part +我+ +教程/+ 5章+ DataReaders/5.4 + DataReaders +和+模式+信息/
这个查询将帮助您DESCRIBE my_table;
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';
参考链接获得更多说明:https://dev.mysql.com/doc/refman/8.0/en/show-columns.html