2010-11-05 1 views
2

Я переношу приложение, ориентированное на базу данных 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, чтобы я не получал случайного порядка (это путает моих сотрудников, которые так плохо используют это!)

ответ

2

Вы можете использовать метод DataTable.Select, чтобы заказать результаты :

databaseConnection.Open(); 
DataTable columns = databaseConnection.GetSchema(
      SqlClientMetaDataCollectionNames.Columns, restrictions); 
foreach (DataRow row in columns.Select("", "COLUMN_NAME")) 
{ 
    temp.Add(row["COLUMN_NAME"] as string); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^