web-dev-qa-db-fra.com

Obtenir les noms de colonnes d'une requête sans données

J'ai une vue vwGetData qui obtient des données de deux tables t1, t2 et a des champs:

t1.Field1 [ALIAS1], t1.Field2, t2.Field3, t2.Field4, t2.Field5 [ALIAS5]

Je vais fournir ci-dessous l'entrée

Select * from vwGetData

je veux obtenir en dessous de la sortie en C #/SQL

ALIAS1
Field2
Field3
Field4
ALIAS5

ou 

ALIAS1, Field2, Field3, Field4, ALIAS5

Je veux faire cela en utilisant C # et SQL.

14
Thakur

La première chose à faire est de vous assurer qu'aucune donnée n'est renvoyée:

SELECT TOP 0 [vwGetData].* FROM [vwGetData] WHERE 1 = 2;

En supposant maintenant que vous sachiez comment configurer un DataReader, procédez comme suit:

using(var reader = command.ExecuteReader())
{
  // This will return false - we don't care, we just want to make sure the schema table is there.
  reader.Read();

  var tableSchema = reader.GetSchemaTable();

  // Each row in the table schema describes a column
  foreach (DataRow row in tableSchema.Rows)
  {
    Console.WriteLine(row["ColumnName"]);
  }
}

Vous pouvez également consulter le Vues du catalogue SQL SYS .

28
Jonathan Dickinson
SELECT COLUMN_NAME
FROM   
INFORMATION_SCHEMA.COLUMNS 
WHERE   
TABLE_NAME = 'vwGetData' 
ORDER BY 
ORDINAL_POSITION ASC; 
11
Silx

La façon la plus simple que j'ai trouvée est la suivante.

using (SqlCommand command = new SqlCommand("SELECT * FROM vwGetData", conn))
{
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        for (int i = 0; i < reader.FieldCount; i++)
            Console.Writeline(reader.GetName(i));
    }
}

Ceci imprimera les noms des colonnes pour chaque ligne de résultat que vous avez.

6
Matthieu M.

Il y a un bon échantillon ici :

using System.Data;
using System.Data.OleDb;

OleDbConnection cn = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand();
DataTable schemaTable; 
OleDbDataReader myReader; 

//Open a connection to the SQL Server Northwind database.
cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=login;
                       Password=password;Initial Catalog=Northwind";
cn.Open();

//Retrieve records from the Employees table into a DataReader.
cmd.Connection = cn;
cmd.CommandText = "SELECT * FROM Employees";
myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo); 

//Retrieve column schema into a DataTable.
schemaTable = myReader.GetSchemaTable();

//For each field in the table...
foreach (DataRow myField in schemaTable.Rows){
    //For each property of the field...
    foreach (DataColumn myProperty in schemaTable.Columns) {
    //Display the field name and value.
    Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
    }
    Console.WriteLine();

    //Pause.
    Console.ReadLine();
}

//Always close the DataReader and connection.
myReader.Close();
cn.Close();
2
Preet Sangha

Vous pouvez également charger les données dans un DataTable, comme suit:

DataTable dtTable = new DataTable();

using (SqlCommand command = new SqlCommand("SELECT * FROM Table", conn))
{
    SqlDataReader reader = command.ExecuteReader();
    dtTable.Load(reader);
}

Et récupérez la colonne dans la première ligne, comme ceci:

var column = dtTable.Rows[0]["YourColumn"];

Ou parcourez toutes les lignes et référencez la colonne, comme suit:

foreach (var c in dtTable.AsEnumerable())
{
    var column = c["YourColumn"];
}
1
Gaui

queryin mysql

SELECT * FROM vwGetData LIMIT 0

dans sqlserver

SELECT TOP 0 * FROM vwGetData

dans Oracle

SELECT * FROM vwGetData WHERE ROWNUM <=0

puis exécutez la requête à partir de c # par exemple 'Oracle'

OracleDataAdapter adapter = new OracleDataAdapter(query, connection);
System.Data.DataTable result = new System.Data.DataTable();
adapter.Fill(result);

List<string> columns = new List<string>();
foreach(DataColumn item in result.Columns)
{
    columns.Add(item.ColumnName);
}
return columns;
0
A.Bahrami Bavani

vous pouvez obtenir toute la liste des colonnes

1.En éditeur de requête SQL écrire uniquement le nom de la table

2.sélectionnez le nom de la table et appuyez sur Alt + F1

0
NIts577

Je reçois tous les noms de colonne en utilisant la méthode suivante.

private static List<string> GetColumnNamesFromTableSchema(IDataReader reader)
    {
        var schemaTable = reader.GetSchemaTable();
        var columnNames = new List<string>();
        if (schemaTable != null)
            columnNames.AddRange(from DataRow row in schemaTable.Rows select row["ColumnName"].ToString());
        return columnNames;
    }

Version de l'application console

Les lignes dans DataTable renvoyées par GetSchemaTable contiennent des informations sur les colonnes de la table et je veux un nom de colonne illimité. 

using (SqlConnection connection = new SqlConnection("Connection String"))
                {
                    SqlCommand command = new SqlCommand("select top 10 * from myschema.MyTable", connection);
                    connection.Open();
                    SqlDataReader reader = command.ExecuteReaderAsync().Result;  
                    DataTable schemaTable = reader.GetSchemaTable();
                    foreach (DataRow row in schemaTable.Rows)
                    {
                        //Console.WriteLine(row["ColumnName"]);
                        foreach (DataColumn column in schemaTable.Columns)
                        {    
                            Console.WriteLine(string.Format("{0} = {1}", column.ColumnName, row[column.ColumnName]));                                   

                        }
                        Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<");
                    }
}

https://support.Microsoft.com/en-us/kb/310107

0
Sumanth