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.
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 .
SELECT COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'vwGetData'
ORDER BY
ORDINAL_POSITION ASC;
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.
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();
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"];
}
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;
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
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(">>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<");
}
}