2010-01-16 2 views
0

У меня есть страница, и в ней вы увидите список таблиц. Мне нужно динамически загружать список столбцов в базе данных. В Subsonic 2.0 это могло быть сделано Subsonic.Schema.BuildTableSchema, но не знаете, как это сделать в версии 3.0. Я попытался с помощью кода ниже, но не работает ..Как получить схему таблицы динамически с помощью Subsonic 3.0?

SubSonic.Schema.DatabaseTable D = new SubSonic.Schema.DatabaseTable("Users",  
     SubSonic.DataProviders.ProviderFactory.GetProvider("ApplicationConnectionString")); 

    foreach (SubSonic.Schema.IColumn Column in D.Columns) 
    { 
     ListItem Item = new ListItem(); 

     if ((Column.Name ?? "").IndexOf("Email") != -1) 
     { 
     Item.Selected = true; 
     } 

     ddlEmailColumn.Items.Add(Item); 
     ddlEmailColumn.SelectedValue = Column.Name; 
    } 

ответ

0

Я не думаю, что кто-то собирается ответить на это, так что я сделал это нелегкий путь, используя следующий следующий SQL запросов:

ВЫБОР COLUMN_NAME ОТ INFORMATION_SCHEMA.COLUMNS ГДЕ tABLE_NAME = 'table_name'

SELECT [имя] ОТ SYSCOLUMNS ГДЕ [ID] IN (SELECT [ID] ОТ sysobjects ГДЕ [имя] = 'table_name') И colid IN (SELECT SIK.colid ОТ sysindexkeys SI K JOIN sysobjects SO ON SIK. [Id] = SO. [Id] WHERE SIK.indid = 1 AND SO. [Name] = 'Table_Name')

0

Я не уверен на 100% относительно различий синтаксиса в SubSonic , но я знаю, что в 2.2 я могу это сделать:

Array arr = MyTable.Schema.Columns.ToArray(); 
0

В SubSonic 3.0 вам не нужно это делать. Схема захвачена во время компиляции макросами T4 и доступна во время выполнения. Вы найдете его в коде, сгенерированном из Structs.tt.

В грубом приближении код

foreach (var column in UsersTable.Columns) { 
    // do stuff with column 
} 
Смежные вопросы