2010-01-16 5 views
0

J'ai une page et il liste des tas de tables dans une liste déroulante. J'ai besoin de charger une liste de colonnes dans la base de données de manière dynamique. Dans Subsonic 2.0, Subsonic.Schema.BuildTableSchema aurait pu le faire mais ne sait pas comment le faire dans 3.0. J'ai essayé d'utiliser le code ci-dessous, mais ne fonctionne pas ..Comment obtenir le schéma de la table dynamiquement en utilisant 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; 
    } 

Répondre

0

Je ne pense pas que quelqu'un va répondre à cela, donc je l'ai fait à la dure en utilisant les éléments suivants suivant les requêtes SQL:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns OERE TABLE_NAME = 'Nom_table'

SELECT [nom] FROM syscolumns OERE [id] IN (SELECT [id] FROM sysobjects OERE [nom] = 'Nom_table') ET colid IN (SELECT SIK.colid FROM sysindexkeys SI K JOIN sysobjects SO SUR SIK. [Id] = SO. [Id] O WH SIK.indid = 1 ET SO. [Nom] = 'Nom_table')

0

Je ne suis pas sûr à 100% sur les différences de syntaxe dans SubSonic , mais je sais que dans 2.2 je suis capable de faire:

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

Dans SubSonic 3.0, vous ne devriez pas avoir besoin de faire cela. Le schéma est capturé au moment de la compilation par les macros T4 et est disponible au moment de l'exécution. Vous le trouverez dans le code généré par Structs.tt.

Lors d'une approximation grossière du code est

foreach (var column in UsersTable.Columns) { 
    // do stuff with column 
} 
Questions connexes