Question

Je lis le schéma de base de données pour la base de données VistaDB 4.0 en utilisant l'API ADO.NET standard « DbConnection.GetSchema ». Je ne l'ai pas trouvé un moyen d'obtenir le réglage « Identity » pour une colonne? La collection de schémas « colonnes » ne semble pas avoir une colonne pour cela et je ne suis pas au courant d'aucune autre collection que je devrais regarder dans.

S'il est impossible en questionnant l'une des collections disponibles, dois-je interroger une table système ou voir?

Toute aide serait appréciée.

Était-ce utile?

La solution

Il n'y a pas de tables "sys" dans VistaDB. Il y a une table [schéma de base de données] qui contient la plupart de ce que vous devez bien.

[schéma de base de données]

Vous pouvez obtenir les colonnes d'identité pour une base de données en utilisant la table de schéma de base de données comme ceci:

select * from [database schema] where typeid = 6

Regardez dans le fichier d'aide pour la liste typeid et ce qu'ils signifient.

Ensuite, une fois que vous avez la liste, vous pouvez le faire correspondre à la typeid pour les tables pour voir quelle table la colonne d'identité est venue.

Le seul hic avec la table de schéma de base de données est que vous ne pouvez pas autoréférence ou se joindre à lui-même (limitation de conception). Donc, si vous avez besoin de tirer et de référence lui-même vous devez le faire en deux commandes, ou par une table temporaire. Le fichier d'aide est un exemple de la façon de le faire ainsi.

Autre Way

Vous pouvez également trouver toutes les colonnes d'identité en utilisant un VistaDB proc stocké:

select * from VistaDBColumnSchema() where is_identity = true

DDA

Si vous avez besoin de trouver la valeur suivante, graines, etc vous pouvez également obtenir les méthodes par DDA (Direct Data Access).

La propriété Identités sur un objet IVistaDBTableSchema est une collection des identités pour cette table. Cette collection peut alors être marché pour tirer les valeurs individuelles.

L'information identité incluse est la semence, l'étape, Tablename et Columnname.

Way ADO.NET GetSchemaTable

Et oui, il y a encore une autre façon. Vous pouvez appeler GetSchemaTable sur un lecteur pour obtenir un peu plus d'informations sur la structure sous-jacente.

using (VistaDBConnection cn = new VistaDBConnection("Data Source=" + dbName))
{
    cn.Open();

    using (VistaDBCommand cmd = new VistaDBCommand("Select * from simpletable", cn))
    {
        using (VistaDBDataReader myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo))
        {
            //Retrieve column schema into a DataTable.
            DataTable schemaTable = myReader.GetSchemaTable();

            foreach (DataRow myField in schemaTable.Rows)
            {
                foreach (DataColumn myProperty in schemaTable.Columns)
                {
                    System.Diagnostics.Debug.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
                }
            }
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top