2012-08-28 60 views
8

是否可以使用GetSchemaTable()来检索列名称?使用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()); 
     } 
    } 

此代码检索大量的表中的数据不需要,我只需要包含 列名!:

回答

17

你需要使用一个列表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 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")); 
} 
+0

仍返回所有数据:-(也许有毛病我环路 – user1495962

+0

@ user1495962:。列名是在每一行的第一列,我不认为这是可以省略其他列信息,如'ColumnOrdinal,ColumnSize,NumericPrecision'等**编辑我的答案** –

+0

这工作thx! – user1495962

0

更改您的代码如下,如果你想要的是显示的列名。您的原始代码试图不仅显示列名称,而且还试图显示实际的数据值。

DataTable table = myReader.GetSchemaTable(); 

foreach (DataRow myField in table.Rows) 
{ 
    foreach (DataColumn myProperty in table.Columns) 
    { 
     fileconnectiongrid.Rows.Add(myProperty.ToString()); 
    } 
} 
+0

tr yid设置它没有运气 – user1495962

0

这会给你所有的列名,你可以将它们放置在一个string[],并与他们做你喜欢什么。

foreach(var columnName in DataTable.Columns) 
{ 
    Console.WriteLine(columnName); 
} 
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); 
    }