2012-08-28 69 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); 
    }