2009-04-08 8 views
1

J'ai le code C# suivant que j'essaye d'obtenir pour retourner les résultats de la procédure stockée avec le schéma de ces résultats. Voici à quoi ressemble mon code (simplifié) ...Obtenir le schéma SQL Server pour une table

Database db = DatabaseFactory.CreateDatabase(); 
DbCommand dbCommand = db.GetStoredProcCommand("MyStoredProcedure"); 
IDataReader drData = db.ExecuteReader(dbCommand); 

DataTable tblSchema; 
tblSchema = drData.GetSchemaTable(); 

Le GetSchemaTable retourne vide. J'ai lu que j'ai besoin de passer CommandBehavior.KeyInfo à la méthode ExecuteReader mais je ne sais pas comment cela ressemblerait à la façon dont j'ai structuré le code puisque je passe la commande dbCommand à l'ExecuteReader.

Répondre

1

Si vous utilisez System.Data.Common.DbCommand, alors, je pense que vous pouvez appeler

IDataReader drData = dbCommand.ExecuteReader(CommandBehavior.KeyInfo); 

[EDIT]

Vous pouvez également utiliser

DataSet ds = new DataSet(); 
db.LoadDataSet(dbCommand, ds, "tableName"); 

ou

db.ExecuteDataSet 

Ceci est un link a trouvé utile

Espérons que cela répond à votre question

1

Embarrassant l'ancien code. C'est ce que j'ai utilisé quand j'ai commencé à apprendre .NET 1.1, et le gars qui m'a appris insistait sur l'utilisation de DataSets/Tables à la place des objets métier. Il a environ 5 ans et a été arraché d'une ancienne bibliothèque, mais avec un nom de table, il vous donnera un jeu de données contenant le schéma de la table.

public static DataSet GetTableSchema(string tableName) 
{ 
    string query = string.Format("SELECT TOP 0 * FROM {0}", tableName); 

    using (SqlConnection localSqlConn = new SqlConnection(GetConnectionString())) 
    { 
     DataSet ds = new DataSet(); 

     SqlCommand sqlCmd = new SqlCommand(query, localSqlConn); 
     SqlDataAdapter sda = new SqlDataAdapter(sqlCmd); 

     sda.FillSchema(ds, SchemaType.Source, tableName); 
     sda.Fill(ds, tableName); 

     sda.Dispose(); 

     return ds; 
    } 
} 
1

La meilleure réponse serait la suivante: 2013 Microsoft Support L'article montrent de multiples façons de récupérer les informations de table, voici une méthode.

SqlConnection cn = new SqlConnection(); 
SqlCommand cmd = new SqlCommand(); 
DataTable schemaTable; 
SqlDataReader myReader; 

//Open a connection to the SQL Server Northwind database. 
cn.ConnectionString = "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();