9

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());
      }
  }

このコードは不要なテーブル データを大量に取得します。必要なのは、列名を含むリストだけです!:

4

5 に答える 5

22

あなたは使用する必要があります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を使用する場合、SQLServer用の.NETFrameworkデータプロバイダーは、SETFMTONLYONで実行されているステートメントの前にあります。

列名は、すべての行の最初の列にあります。この場合のみColumnOrdinal,ColumnSize,NumericPrecision使用できないため、他の列情報などを省略できないと思います。reader.GetStringreader.GetSchemaTable

ただし、列名のみが必要な場合は、ループが正しくありません。

foreach (DataRow col in schema.Rows)
{
    Console.WriteLine("ColumnName={0}", col.Field<String>("ColumnName"));
}
于 2012-08-28T14:05:39.053 に答える
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);
  }
于 2013-11-15T16:16:28.333 に答える
0

列名を表示するだけの場合は、コードを次のように変更します。元のコードは、列名を表示するだけでなく、実際のデータ値も表示しようとしていました。

DataTable table = myReader.GetSchemaTable();

foreach (DataRow myField in table.Rows)
{
    foreach (DataColumn myProperty in table.Columns)
    {
        fileconnectiongrid.Rows.Add(myProperty.ToString());
    }
}
于 2012-08-28T14:32:08.427 に答える