2010-01-16 24 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查詢硬盤的方式:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME ='Table_Name'

SELECT [name] FROM syscolumns WHERE [id] IN(SELECT [id] FROM sysobjects WHERE [name] ='Table_Name')AND colid IN(SELECT SIK.colid FROM 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 
}