none
Bei OdbcConnection.GetSchema auf bestimmte Tabellennamen filtern RRS feed

  • Frage

  • Hi,

    ich rufe alle Tabellennamen mittels der Funktion OdbcConnection.GetSchema("", "")  ab.

    Da mir die Tabellennamen z.T. bekannt sind, möchte ich die Ermittlung gerne eingrenzen.

    Z.B. nach "Alle Tabellen die den Begriff 'MeineFirma' oder 'MyCompany' enthalten.

    Wie kann ich eine solche Filterung aufnehmen?

    Vielen Dank und viele Grüße

    Christian

    Donnerstag, 2. Dezember 2010 13:20

Antworten

  • Hallo Christan,

    die GetSchema Methoden unterstützen zwar Restriktionen,  siehe Schemaeinschränkungen (ADO.NET)
    Nur ob dabei auch Wildcards unterstützt werden, hängt vom jeweiligen Provider ab (meist nicht).

    Das einfachte (portablste) ist i. a. alle Tabellen abzurufen, ggf. durch Catalog, Schema beschränkt.
    Solange das Datenbank-Schema nicht sehr, sehr groß ist macht das i. d. R. kaum einen Unterschied,
    da Schemainformationen i. a. ohnehin von gecacht werden.

    Und danach jeweils einen Filter z. B. via DataTable.Select vorzunehmen.

    Gruß Elmar

     

    Donnerstag, 2. Dezember 2010 14:23
    Beantworter
  • Hallo Christian,

    ja, Du bist hier mit der Methode, "alle" Tabellen aus dem Schema zu lesen und dann mit .NET Methoden zu filtern, deutlich flexibler und das halte ich hier für die pragmatisch beste Methode. Hier auch ein paar C# Infos dazu bei OleDb, was Du dann eben entspechend ODBC umsetzen musst:

    [Schema Informationen aus Datenbanken ermitteln]
    http://dzaebel.net/ShowViewColumn.htm

    Von der Performance her wird das keinen großen Effekt haben, dass Du erst nach der Abfrage filterst. Ich würde aber wahrscheinlich eher ein eigenes Dictionary für die TableNames machen, als mit DataTable.Select arbeiten, aber das ist auch kein kriegsentscheidendes Thema.


    ciao Frank
    Freitag, 3. Dezember 2010 13:55

Alle Antworten

  • Hallo Christan,

    die GetSchema Methoden unterstützen zwar Restriktionen,  siehe Schemaeinschränkungen (ADO.NET)
    Nur ob dabei auch Wildcards unterstützt werden, hängt vom jeweiligen Provider ab (meist nicht).

    Das einfachte (portablste) ist i. a. alle Tabellen abzurufen, ggf. durch Catalog, Schema beschränkt.
    Solange das Datenbank-Schema nicht sehr, sehr groß ist macht das i. d. R. kaum einen Unterschied,
    da Schemainformationen i. a. ohnehin von gecacht werden.

    Und danach jeweils einen Filter z. B. via DataTable.Select vorzunehmen.

    Gruß Elmar

     

    Donnerstag, 2. Dezember 2010 14:23
    Beantworter
  • Hallo Christian,

    ja, Du bist hier mit der Methode, "alle" Tabellen aus dem Schema zu lesen und dann mit .NET Methoden zu filtern, deutlich flexibler und das halte ich hier für die pragmatisch beste Methode. Hier auch ein paar C# Infos dazu bei OleDb, was Du dann eben entspechend ODBC umsetzen musst:

    [Schema Informationen aus Datenbanken ermitteln]
    http://dzaebel.net/ShowViewColumn.htm

    Von der Performance her wird das keinen großen Effekt haben, dass Du erst nach der Abfrage filterst. Ich würde aber wahrscheinlich eher ein eigenes Dictionary für die TableNames machen, als mit DataTable.Select arbeiten, aber das ist auch kein kriegsentscheidendes Thema.


    ciao Frank
    Freitag, 3. Dezember 2010 13:55