Announcement

Collapse
No announcement yet.

C# Datenbankinfos aus dem SQL Server (bspw. Felder von Tabellen) über oledb erhalten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • C# Datenbankinfos aus dem SQL Server (bspw. Felder von Tabellen) über oledb erhalten

    Hallo Entwickler !!

    Habe wieder einmal ein Problem, bei welchem mir Google über die von mir erstellte Suche nichts liefert, was mir direkt hilft.

    Ich benötige für ein Dropdown-Feld die Felder einer bestimmten Tabelle des SQL Servers.

    Die Tabelle ermittle ich durch eine Abfrage, über diese Information (des Tabellennamens) verfüge ich also.

    Die Felder der Tabelle jedoch muss ich ermitteln.

    Vorweg gesagt: Ich arbeite momentan noch mit SQL Server 2000- stelle jedoch momentan auf SQL Server 2005 um, und arbeite somit mit der Applikation momentan parallel auf 2 verschiedenen SQL Servern (sowie auf verschiedenen lokalen Rechnern).

    Und genau darin liegt der Hund begraben.

    Bisher habe ich ganz einfach auf die Systemtabellen des SQL Server 2000 "sysobjects" zugegriffen, mir dort meine ObjektID der jeweiligen Tabelle geholt, und mit dieser dann in syscolumns die jeweiligen Felder ermittelt.

    Das war denkbar einfach und hat funktioniert.

    Nun habe ich wie angekündigt den Parallelbetrieb mit einem SQL Server 2005 aufgenommen- und darf nun auf eine View namens "objects" sowie "COLUMNS" der master-Datenbank zugreifen, welche strukturell natürlich völlig anders aussehen als meine bisherigen Systemtabellen.

    Ich stelle also fest, dass diese Variante- sofern ich die Abfragen auf meine Felder immer schön mit den SQL Server-Erneuerungen anpasse- zwar funktioniert, aber durch den ständigen Anpassungsaufwand nicht praktikabel ist.

    Nun zu meiner Frage:
    Ich habe gehört, dass man Schemainformationen bzw. Datenbankinfos auch über oledb ermitteln kann. Habt Ihr eine Idee, wie ich derarte Informationen auch anders ermitteln kann? Gibt es dafür irgendwo ein Snippet oder etwas vergleichbares?

    Vielen Dank und viele Grüße
    Stephan

    "A fool with a tool is still a fool."

  • #2
    wie wäre es mit einem einfachen

    SELECT * FROM <Tabelle> where 1=2
    und dann über die Feldliste gehen.

    Comment


    • #3
      Zuweisung der Felder an eine ComboBox

      Originally posted by Bernhard Geyer View Post
      wie wäre es mit einem einfachen



      und dann über die Feldliste gehen.
      Vielen Dank, Bernhard Geyer !

      Kannst du mir evtl. einmal in einem Beispiel zeigen, wie du dann einer ComboBox die Feldnamen zuweisen würdest?

      Bin gerade etwas schwer von Begriff... :-)

      Vielen vielen Dank und Grüße
      Stephan

      "A fool with a tool is still a fool."

      Comment


      • #4
        Viel Kommentar, wenig Fragen, dazu noch sehr allgemeine Dinge...

        Zunächst gehören Datenbank-Fragen ins Unterforum ADO.NET.

        Für den MS-SQL Server sind die Klassen aus dem System.Data.SqlClient Namespace viel praktischer und passender als die OleDb-Klassen.

        Eine allgemeine Anleitung zur Zusammenarbeit zwischen Programm und SQL-DB ist zu finden im openbook VC# Kap. 25 ff.

        Für die Felder hat Bernhard ein mögliches Verfahren genannt. Allgemein erhält man Informationen über die Datenbank über die SqlConnection.GetSchema-Methode. Das liefert je nach Bedarf eine DataTable; Erläuterungen dazu findet man in der SDK-Doku/MSDN in den Kapiteln "Abrufen von Schemainformationen aus einer Datenbank" und "Verstehen der anbieterspezifischen Schemaauflistungen".

        Zu Deiner konkreten Frage: Wie Items in eine ComboBox eingefügt werden, findest Du in der SDK-Doku/MSDN im Beispiel zur ComboBox-Klasse. Bei Bernhards Vorschlag bekommst Du sie z.B. über die SqlDataReader.GetSchemaTable-Methode:
        [highlight=C#]SqlCommand cmd = new SqlCommand("...");
        SqlDataReader reader = cmd.ExecuteReader();
        DataTable schema = reader.GetSchemaTable();
        // wie es jetzt weitergeht, ergibt sich aus der Struktur dieser DataTable,
        // und auch das steht in der SDK-Doku/MSDN[/highlight]
        Bitte lass Dir nicht alles vorkauen, sondern mache Dich in der SDK-Doku/MSDN selbst sachkundig!

        Jürgen

        Comment


        • #5
          Thema von C# nach ADO.net verschoben.

          mfG Gü
          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

          Comment

          Working...
          X