Я переношу приложение, ориентированное на базу данных VB6, опираясь на ADO на C# (полагаясь на ADO.NET). Схема доступа к базам данных этого приложения произвольна, и я полагаюсь на DbConnection.GetSchema
для получения информации.Как вы можете указать порядок, в котором 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, чтобы я не получал случайного порядка (это путает моих сотрудников, которые так плохо используют это!)