是否可以使用GetSchemaTable()
仅检索列名?
我一直在尝试使用此方法检索列名(仅限),是否可能。
DataTable table = myReader.GetSchemaTable();
foreach (DataRow myField in table.Rows)
{
foreach (DataColumn myProperty in table.Columns)
{
fileconnectiongrid.Rows.Add(myProperty.ColumnName + " = "
+ myField[myProperty].ToString());
}
}
这段代码检索了大量不需要的表数据,我只需要一个包含的列表 列名!:
答案 0 :(得分:20)
您需要使用ExecuteReader(CommandBehavior.SchemaOnly))
:
DataTable schema = null;
using (var con = new SqlConnection(connection))
{
using (var schemaCommand = new SqlCommand("SELECT * FROM table", con))
{
con.Open();
using (var reader = schemaCommand.ExecuteReader(CommandBehavior.SchemaOnly))
{
schema = reader.GetSchemaTable();
}
}
}
查询仅返回列信息。使用SchemaOnly时, SQL Server的.NET Framework数据提供程序位于语句之前 使用SET FMTONLY ON执行。
列名称位于每行的第一列。我不认为可以省略其他列信息,例如ColumnOrdinal,ColumnSize,NumericPrecision
等等,因为在这种情况下你不能使用reader.GetString
而只能使用reader.GetSchemaTable
。
但如果你只想要列名,你的循环是不正确的:
foreach (DataRow col in schema.Rows)
{
Console.WriteLine("ColumnName={0}", col.Field<String>("ColumnName"));
}
答案 1 :(得分:0)
如果您只想显示列名,请将代码更改为以下代码。您的原始代码不仅尝试显示列名,还尝试显示实际数据值。
DataTable table = myReader.GetSchemaTable();
foreach (DataRow myField in table.Rows)
{
foreach (DataColumn myProperty in table.Columns)
{
fileconnectiongrid.Rows.Add(myProperty.ToString());
}
}
答案 2 :(得分:0)
这将为您提供所有列名称,您可以将它们放在string[]
中并按照您喜欢的方式处理它们。
foreach(var columnName in DataTable.Columns)
{
Console.WriteLine(columnName);
}
答案 3 :(得分:0)
//Retrieve column schema into a DataTable.
schemaTable = reader.GetSchemaTable();
int index = schemaTable.Columns.IndexOf("ColumnName");
DataColumn columnName = schemaTable.Columns[index];
//For each field in the table...
foreach (DataRow myField in schemaTable.Rows)
{
String columnNameValue = myField[columnName].ToString();
Console.WriteLine("ColumnName " + columnNameValue);
}