Domanda

sto leggendo lo schema del database per il database di VistaDB 4.0 utilizzando l'ADO.NET API standard 'DbConnection.GetSchema'. Non ho trovato un modo per ottenere l'impostazione 'identità' per una colonna? La raccolta di schemi 'colonne' non sembra avere una colonna per questo e io non sono a conoscenza di qualsiasi altra raccolta che dovrei approfondire.

Se non è possibile interrogando una delle collezioni disponibili, devo interrogare qualche tabella di sistema o vedere?

Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

Non ci sono "sys" tabelle in VistaDB. C'è un tavolo [schema di database] che contiene la maggior parte di ciò che è necessario però.

[schema del database]

È possibile ottenere le colonne di identità per un database utilizzando la tabella di schema di database in questo modo:

select * from [database schema] where typeid = 6

Cercare nel file di help per l'elenco typeid e il loro significato.

Poi, una volta che avete l'elenco, si può abbinare fino al typeid per le tabelle per vedere cosa tavolo la colonna di identità è venuto da.

L'unico problema con la tabella di schema del database è che non si può auto riferimento o unirlo a se stesso (limitazione di progettazione). Quindi, se avete bisogno di tirare e di riferimento da se stesso si deve fare in due comandi, o tramite una tabella temporanea. Il file di aiuto ha un esempio di come fare questo.

modo alternativo

È inoltre possibile trovare tutte le colonne di identità utilizzando un proc memorizzato VistaDB:

select * from VistaDBColumnSchema() where is_identity = true

DDA

Se hai bisogno di trovare il valore successivo, di semi, ecc È possibile anche ottenere quelle attraverso metodi DDA (accesso diretto ai dati).

La proprietà Identità su un oggetto IVistaDBTableSchema è una raccolta delle identità per quel tavolo. Che la raccolta può quindi essere percorsa a tirare i singoli valori.

L'identità informazioni incluse è il Seme, Step, Tablename e Columnname.

ADO.NET GetSchemaTable Way

E sì, c'è ancora un altro modo. È possibile chiamare GetSchemaTable su un lettore per avere qualche informazione in più sulla struttura sottostante.

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());
                }
            }
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top