Frage

Ich lese das Datenbankschema für VistaDB 4.0-Datenbank des Standard ADO.NET ‚DbConnection.GetSchema‘ API verwenden. Ich habe gefunden, keinen Weg, um die ‚Identität‘ -Einstellung für eine Spalte zu erhalten? Die ‚Spalten‘ Schemaauflistung scheint nicht eine Spalte für diese zu haben, und ich bin mir nicht bewusst jede andere Sammlung, dass ich schauen in sollte.

Wenn es nicht möglich ist, durch eine der verfügbaren Sammlungen abfragen, muss ich einige Systemtabelle oder Ansicht abzufragen?

Jede mögliche Hilfe würde geschätzt.

War es hilfreich?

Lösung

Es gibt keine "sys" Tabellen in VistaDB. Es gibt eine [Datenbank-Schema] Tabelle, die das meiste, was Sie brauchen, enthält aber.

[Datenbankschema]

Sie können die Identitätsspalten für eine Datenbank erhalten das Datenbankschema-Tabelle wie folgt aus:

select * from [database schema] where typeid = 6

Suchen Sie in der Hilfedatei für das typeid Liste und was sie bedeuten.

Dann, wenn Sie die Liste haben, können Sie es auf dem typeid zusammenpassen für Tabellen zu sehen, welche Tabelle die Identität Spalte kam.

Der einzige Haken mit der Datenbankschema-Tabelle ist, dass Sie nicht selbst Verweis oder verbinden sie selbst (Entwurfsbeschränkung). Also, wenn Sie von sich selbst zu ziehen und Referenz benötigen haben Sie es in zwei Befehle zu tun, oder durch eine temporäre Tabelle. Die Hilfedatei hat ein Beispiel dafür, wie dies auch zu tun.

Alternative Way

Sie können auch alle die Identitätsspalten mit einer VistaDB gespeicherte Prozedur finden:

select * from VistaDBColumnSchema() where is_identity = true

DDA

Wenn Sie den nächsten Wert finden müssen, Samen, etc können Sie auch diejenigen, die durch DDA (Direct Data Access) Methoden erhalten.

Die Identitäten Eigenschaft für ein IVistaDBTableSchema Objekt ist eine Sammlung der Identitäten für diese Tabelle. Dass Sammlung kann dann ging die einzelnen Werte zu ziehen.

Die Identitätsinformationen enthalten sind die Seed, Step, Tablename und Column.

ADO.NET GetSchemaTable Way

Und ja, es gibt noch eine andere Art und Weise. Sie können GetSchemaTable auf einem Leser rufen einige weitere Informationen über die zugrunde liegende Struktur zu erhalten.

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());
                }
            }
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top