Я портирую приложение, ориентированное на базу данных VB6, полагаясь на ADO, на C # (полагаясь на ADO.NET). Схема баз данных, к которым это приложение обращается, произвольна, и я полагаюсь на DbConnection.GetSchema
для получения информации.
Насколько я могу судить (и здесь мне нужна помощь), GetSchema
должен заменить ADOX.Catalog. Итак, вот что у меня есть (извините за форматирование!):
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);
}
}
Я точно знаю, что это правильно заполняет temp
именами столбцов для таблицы с именем tableName
. Тем не менее, порядок выглядит произвольным, тогда как в ADOX.Catalog порядок точно такой же, как в Sql Management Studio. Вот как это делает оригинал:
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
Они выходят в разных порядках, и я не уверен, что с этим делать!
Мой вопрос в основном: есть ли в ADO.NET замена на ADOX.Catalog, кроме GetSchema? Если это не так, как я могу заказать GetSchema, чтобы я не получал случайный заказ (это может смутить моих коллег, которые так плохо это используют!)