Je suis en train de porter une application basée sur la base de données VB6 reposant sur ADO vers C# (en s'appuyant sur ADO.NET). Le schéma des bases de données cet accès d'application sont arbitraires et je compte sur DbConnection.GetSchema
pour récupérer des informations. Aussi près que je peux dire (Et voici où j'ai besoin d'aide), GetSchema
est censé remplacer le ADOX.Catalog. Alors, voici ce que j'ai (désolé pour le formatage!):Comment pouvez-vous indiquer l'ordre dans lequel DbConnection.GetSchema renvoie ses valeurs?
List<string> temp = new List<string>();
string[] restrictions = new string[4] { null, null, tableName, null };
using (SqlConnection databaseConnection = new SqlConnection(connString))
{
databaseConnection.Open();
foreach (DataRow row in databaseConnection.GetSchema(
SqlClientMetaDataCollectionNames.Columns, restrictions).Rows)
{
temp.Add(row["COLUMN_NAME"] as string);
}
}
Je sais pertinemment que cela remplit correctement temp
les noms des colonnes de la table nommée tableName
. Cependant, l'ordre semble arbitraire, alors qu'avec ADOX.Catalog, la commande est exactement la même que celle trouvée dans Sql Management Studio. Voici comment l'original le fait:
Dim cat As New ADOX.Catalog
Dim T As ADOX.Table
Dim C As ADOX.Column
Set cat.ActiveConnection = conn
'retrieve list of fields for this table'
Set T = cat.Tables(tableName)
For Each C In T.Columns
temp.Add C.Name
Next
Ils sortent dans des ordres différents, et je ne suis pas sûr de quoi faire à ce sujet!
Ma question est essentiellement: Est-ce que ADO.NET a un remplacement pour ADOX.Catalog autre que GetSchema? Si ce n'est pas le cas, comment puis-je commander GetSchema pour ne pas avoir de commandes aléatoires (cela va embrouiller mes collègues qui utilisent si mal!)