select*from INFORMATION_SCHEMA.COLUMNS
where TABLE_Name='YourTableName'
order by ORDINAL_POSITION
mais je travaille dans l'Accès et dans l'accès, il n'est pas ajouter "accès" de la balise à la question! Ce n'est pas de travail dans l'accès. Pouvez-vous expliquer ce que INFORMATION_SCHEMA est? Ali, j'ai répondu à cette question avant l'OP précisé qu'ils travaillaient dans la Base de données Access. Ma réponse si spécifiquement pour SQL Server 2005 et les bases de données qui prennent en charge les informations de schéma standard ANSI. Apparemment la version de votre Base de données Access ne prend pas en charge les informations de schéma standard ANSI. Les informations de schéma est une norme ANSI ensemble de lecture seule vue qui fournissent des informations sur toutes les tables, les vues, les colonnes, et des procédures dans une base de données. en.wikipedia.org/wiki/Information_schema
Voici un exemple réel qui accède au schéma de la table et l'imprime plaine et dans le fichier XML (juste pour voir ce que les informations que vous obtenez):
classAccessTableSchemaTest{publicstaticDbConnectionGetConnection(){returnnewOleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\Test.mdb");}staticvoidMain(string[] args){
using (DbConnection conn =GetConnection()){
conn.Open();DbCommand command = conn.CreateCommand();//(1) we're not interested in any data
command.CommandText="select * from Test where 1 = 0";
command.CommandType=CommandType.Text;DbDataReader reader = command.ExecuteReader();//(2) get the schema of the result setDataTable schemaTable = reader.GetSchemaTable();
conn.Close();}PrintSchemaPlain(schemaTable);Console.WriteLine(newstring('-',80));PrintSchemaAsXml(schemaTable);Console.Read();}privatestaticvoidPrintSchemaPlain(DataTable schemaTable){foreach(DataRow row in schemaTable.Rows){Console.WriteLine("{0}, {1}, {2}",
row.Field<string>("ColumnName"),
row.Field<Type>("DataType"),
row.Field<int>("ColumnSize"));}}privatestaticvoidPrintSchemaAsXml(DataTable schemaTable){StringWriter stringWriter =newStringWriter();
schemaTable.WriteXml(stringWriter);Console.WriteLine(stringWriter.ToString());}}
Points d'intérêt:
Ne pas renvoyer toutes les données en donnant une clause where qui prend toujours la valeur false. Bien sûr, cela s'applique uniquement si vous n'êtes pas intéressés par les données :-).
Utilisation IDataReader.GetSchemaTable() pour obtenir un DataTable avec des infos détaillées sur le réel de la table.
N'est pas " conn.Close()' superflue, puisque la connexion est créée à l'intérieur d'une 'aide' de construire, qui va fermer la connexion lors de l'exécution de existe la construction de toute façon?
puis parcourir la liste des champs (et les valeurs de retour) dans le jeu de résultats pour obtenir les noms des champs.
Si vous avez besoin de la colonne noms ensuite, cette approche rapide et sale est bien de l'OMI. Remarque vous pouvez ajouter d'OÙ 0=1 (ou similaire) pour assurer aucune donnée n'est renvoyée. Cela ne fonctionne pas si vous avez des légendes défini. Il indique la légende de la place.
Demandez-vous comment vous pouvez obtenir les noms de colonne d'une table dans une Base de données?
Si donc il dépend entièrement de la Base de données de Serveur que vous utilisez.
Dans SQL 2005, vous pouvez sélectionner à partir de la INFORMATION_SCHEMA.Les Colonnes De La Vue
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='MyTable'
DANS SQL server 2000, vous pouvez vous joindre SysObjects pour SysColumns pour obtenir les informations
SELECT
dbo.sysobjects.name AsTableName, dbo.syscolumns.name AS FieldName
FROM
dbo.sysobjects
INNER JOIN dbo.syscolumns
ON dbo.sysobjects.id = dbo.syscolumns.id
WHERE
dbo.sysobjects.name ='MyTable'
Comment est-ce que votre réponse s'appliquent à l'Accès/Jet? -1 Il demande à propos de MS Access. Désolé, je reprends mon -1, la question d'origine n'était pas claire sur ce point. Je pense que lorsque cette réponse a été posté il y avait seulement un SQL tag, le MS-Access tag a été ajouté plus tard.
Utilisation de la DAO classes d'automation. Vous pouvez déjà avoir une bibliothèque d'interopérabilité pour votre installation de Visual Studio. Si non, il est assez facile d'en créer un, il suffit d'ajouter une référence à la DAO COM bibliothèque.
using dao;...DBEngineClass dbengine =newDBEngineClass();
dbengine.OpenDatabase(path,null,null,null);Database database = dbengine.Workspaces[0].Databases[0];List<string> fieldnames =newList<string>();TableDef tdf = database.TableDefs[tableName];for(int i =0; i < tdf.Fields.Count; i++){
fieldnames.Add(tdf.Fields[i].Name);}
database.Close();
dbengine.Workspaces[0].Close();
C'est tout aussi facile que de l'interrogation d'une table système (que j'ai trouvé un problème dans l'Accès), et vous pouvez obtenir un grand nombre d'informations supplémentaires de cette façon.
EDIT:
J'ai modifié le code à partir de ce que j'ai posté hier, j'ai eu juste traduit de l'VB.NET et qui était à côté d'un couple de morceaux. J'ai réécrit et testé en C# dans VS2008.
À partir de C#, l'ADO fonctions de Catalogue peut être plus facile. IIRC les appels à la méthode OpenSchema pour obtenir les INFORMATIONS de SCHÉMA de Vues ne sont pas simples pour C# et peut-être pas la peine juste pour les noms de colonne.
Ce Code affichera tous les nom de colonne de la table, comme une classe avec getter propriété de tous les noms de colonne, qui peut ensuite être utilisé dans c# code
declare @TableName sysname ='<EnterTableName>'
declare @Result varchar(max)='public class '+@TableName+'{'select@Result=@Result+'publicstaticstring' + ColumnName + '{ get {return"'+ColumnName+'";}}'from(select
replace(col.name,' ','_')ColumnName,
column_id ColumnIdfrom sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)) t
order byColumnIdset@Result=@Result+'}'
print @Result
De sortie:
publicclass tblPracticeTestSections
{publicstaticstring column1 { get {return"column1";}}publicstaticstring column2{ get {return"column2";}}publicstaticstring column3{ get {return"column3";}}publicstaticstring column4{ get {return"column4";}}}
Selon le moteur de base de votre aide, vous pouvez facilement effectuer une requête sur la DB tables système pour l'information en
Pour l'accès, je ne peux pas trouver la réponse je sais que vous peut voir le sys tables dans l'accès et à partir de là, vous pouvez essayer de déterminer où cette information est mais je ne suis pas vraiment sûr de savoir comment faire de cette partie. essayé à l'aide d'un exemple, mais il a obtenu nowwhere
MSysObjects contient la liste des tables, il n'y a pas d'équivalent pour les champs malheureusement.
J'ai eu de la chance avec le GetSchema propriété de la OleDb.Connexion:
Une classe afin de fournir les données de la colonne. Cela renvoie TOUTES les colonnes dans la base de données. Le résultant DataTable peut ensuite être filtrée par les noms de colonnes qui correspondent (pour la plupart) à celles qui figurent dans la norme INFORMATION_SCHEMA (MS Access ne fournit PAS pour nous):
classJetMetaData{///<summary>///Returns a datatable containing MetaData for all user-columns///in the current JET Database. ///</summary>///<returns></returns>publicstaticDataTableAllColumns(StringConnectionString){DataTable dt;
using (OleDbConnection cn =newOleDbConnection(ConnectionString)){
cn.Open();
dt = cn.GetSchema("Columns");
cn.Close();}return dt;}}
Ensuite, la consommation de la classe dans un assez brut et élégant exemple, et le filtrage sur TABLE_NAME:
Notez que je ne prétends pas que c'est bien si le code. C'est seulement un exemple. Mais j'ai utilisé quelque chose comme cela sur un certain nombre de reprises, et en fait même créé une application pour créer un script sur un ensemble de base de données MS Access (contraintes, et tous) à l'aide de méthodes similaires.
Alors que j'en ai vu d'autres dans ce fil de mentionner l'obtenir Schéma, il semble slike certains de la mise en œuvre était trop compliqué . . .
cela fonctionnera sur sql server 2005 et jusqu':
ajouter "accès" de la balise à la question!
Ce n'est pas de travail dans l'accès. Pouvez-vous expliquer ce que INFORMATION_SCHEMA est?
Ali, j'ai répondu à cette question avant l'OP précisé qu'ils travaillaient dans la Base de données Access. Ma réponse si spécifiquement pour SQL Server 2005 et les bases de données qui prennent en charge les informations de schéma standard ANSI. Apparemment la version de votre Base de données Access ne prend pas en charge les informations de schéma standard ANSI. Les informations de schéma est une norme ANSI ensemble de lecture seule vue qui fournissent des informations sur toutes les tables, les vues, les colonnes, et des procédures dans une base de données. en.wikipedia.org/wiki/Information_schema
OriginalL'auteur KM.
Utilisation IDataReader.GetSchemaTable()
Voici un exemple réel qui accède au schéma de la table et l'imprime plaine et dans le fichier XML (juste pour voir ce que les informations que vous obtenez):
Points d'intérêt:
Pour ma table de test de la sortie était:
OriginalL'auteur VVS
Exécuter cette requête:
puis parcourir la liste des champs (et les valeurs de retour) dans le jeu de résultats pour obtenir les noms des champs.
Cela ne fonctionne pas si vous avez des légendes défini. Il indique la légende de la place.
OriginalL'auteur BIBD
Demandez-vous comment vous pouvez obtenir les noms de colonne d'une table dans une Base de données?
Si donc il dépend entièrement de la Base de données de Serveur que vous utilisez.
Dans SQL 2005, vous pouvez sélectionner à partir de la INFORMATION_SCHEMA.Les Colonnes De La Vue
DANS SQL server 2000, vous pouvez vous joindre SysObjects pour SysColumns pour obtenir les informations
-1 Il demande à propos de MS Access.
Désolé, je reprends mon -1, la question d'origine n'était pas claire sur ce point.
Je pense que lorsque cette réponse a été posté il y avait seulement un SQL tag, le MS-Access tag a été ajouté plus tard.
OriginalL'auteur Eoin Campbell
Utilisation de la DAO classes d'automation. Vous pouvez déjà avoir une bibliothèque d'interopérabilité pour votre installation de Visual Studio. Si non, il est assez facile d'en créer un, il suffit d'ajouter une référence à la DAO COM bibliothèque.
C'est tout aussi facile que de l'interrogation d'une table système (que j'ai trouvé un problème dans l'Accès), et vous pouvez obtenir un grand nombre d'informations supplémentaires de cette façon.
EDIT:
J'ai modifié le code à partir de ce que j'ai posté hier, j'ai eu juste traduit de l'VB.NET et qui était à côté d'un couple de morceaux. J'ai réécrit et testé en C# dans VS2008.
IIRC les appels à la méthode OpenSchema pour obtenir les INFORMATIONS de SCHÉMA de Vues ne sont pas simples pour C# et peut-être pas la peine juste pour les noms de colonne.
OriginalL'auteur John M Gant
Ce Code affichera tous les nom de colonne de la table, comme une classe avec
getter
propriété de tous les noms de colonne, qui peut ensuite être utilisé dansc#
codeDe sortie:
OriginalL'auteur Atal Kishore
Selon le moteur de base de votre aide, vous pouvez facilement effectuer une requête sur la DB tables système pour l'information en
Pour l'accès, je ne peux pas trouver la réponse je sais que vous peut voir le sys tables dans l'accès et à partir de là, vous pouvez essayer de déterminer où cette information est mais je ne suis pas vraiment sûr de savoir comment faire de cette partie. essayé à l'aide d'un exemple, mais il a obtenu nowwhere
OriginalL'auteur Nuno Furtado
pour microsoft SQL en c# vous pouvez effectuer les opérations suivantes:
donc crée un mappage de nom de colonne dans son index qui peuvent être utilisés comme suit:
OriginalL'auteur Vlad
J'ai eu de la chance avec le GetSchema propriété de la OleDb.Connexion:
Une classe afin de fournir les données de la colonne. Cela renvoie TOUTES les colonnes dans la base de données. Le résultant DataTable peut ensuite être filtrée par les noms de colonnes qui correspondent (pour la plupart) à celles qui figurent dans la norme INFORMATION_SCHEMA (MS Access ne fournit PAS pour nous):
Ensuite, la consommation de la classe dans un assez brut et élégant exemple, et le filtrage sur TABLE_NAME:
Notez que je ne prétends pas que c'est bien si le code. C'est seulement un exemple. Mais j'ai utilisé quelque chose comme cela sur un certain nombre de reprises, et en fait même créé une application pour créer un script sur un ensemble de base de données MS Access (contraintes, et tous) à l'aide de méthodes similaires.
Alors que j'en ai vu d'autres dans ce fil de mentionner l'obtenir Schéma, il semble slike certains de la mise en œuvre était trop compliqué . . .
Espère que ça aide!
OriginalL'auteur XIVSolutions