是否可以使用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());
}
}此代码检索了许多不需要的表数据,我只需要一个包含列名的列表!:
发布于 2012-08-28 22:05:39
您需要使用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
查询仅返回列信息。使用SchemaOnly时,SQL Server的.NET框架数据访问接口位于正在执行的语句之前,且SET FMTONLY为ON。
列名位于每行的第一列。我不认为可以省略其他列信息,比如ColumnOrdinal,ColumnSize,NumericPrecision等等,因为在本例中不能使用reader.GetString,只能使用reader.GetSchemaTable。
但是,如果您只需要列名,那么您的循环是不正确的:
foreach (DataRow col in schema.Rows)
{
Console.WriteLine("ColumnName={0}", col.Field<String>("ColumnName"));
}发布于 2012-08-28 22:32:08
如果您只想显示列名,请将您的代码更改为下面的代码。您的原始代码不仅试图显示列名,还试图显示实际的数据值。
DataTable table = myReader.GetSchemaTable();
foreach (DataRow myField in table.Rows)
{
foreach (DataColumn myProperty in table.Columns)
{
fileconnectiongrid.Rows.Add(myProperty.ToString());
}
}发布于 2013-09-27 20:44:32
这将为您提供所有的列名,您可以将它们放在一个string[]中,然后随心所欲地使用它们。
foreach(var columnName in DataTable.Columns)
{
Console.WriteLine(columnName);
}https://stackoverflow.com/questions/12160976
复制相似问题