Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie Datenbankfelder auslesen
tequila slammer
myCSharp.de - Member



Dabei seit:
Beiträge: 255
Herkunft: DE

Themenstarter:

Wie Datenbankfelder auslesen

beantworten | zitieren | melden

Hallo.

Ist es möglich in C# nach Auswahl einer Datenbank(SQL oder Access) ihre Tabellen und deren Felder auszulesen und in Form eines Baumes anzeigen zulassen?

Ich habe ein Programm geschrieben, das ich nun so erweitern möchte, dass der Benutzer einstellen kann, welche Felder in eine xml Datei geschrieben werden sollen. Bisher muss ich das im Code angeben, was mir nicht so gefällt, da bei Änderungen der Datenbankstruktur Fehler auftreten würden.

Mfg
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4802
Herkunft: Leipzig

beantworten | zitieren | melden

Und wo ist jetzt genau Dein Problem? Kommt ein Fehler oder ähnliches?
private Nachricht | Beiträge des Benutzers
tequila slammer
myCSharp.de - Member



Dabei seit:
Beiträge: 255
Herkunft: DE

Themenstarter:

beantworten | zitieren | melden

bisher nicht. Mein Problem ist, dass ich keinen Ansatz dafür finde ganze Tabellennamen und deren Feldnamen auszulesen.
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo tequlia slammer,

die Informationen bekommst du über die Systemtabellen. Zum Beispiel:

select * from sysobjects where xtype = 'u'

gibt dir den Namen aller Tabellen zurück.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4802
Herkunft: Leipzig

beantworten | zitieren | melden

Hättest Du mal die Suchfunktion benutzt, wärst Du vlt. schon fertig.

MSSQL Spaltennamen ermitteln
Spaltennamen
Tabellennamen aus mssql
Spalteninformationen aus DB abrufen
Auslesen von Tabellen- und Datenbankinformationen
Tabellen in Datenbank auflisten.
private Nachricht | Beiträge des Benutzers
tequila slammer
myCSharp.de - Member



Dabei seit:
Beiträge: 255
Herkunft: DE

Themenstarter:

beantworten | zitieren | melden

danke vielmals.

Die Suche hatte ich benutzt aber gänzlich in die falsche Richtung gesucht.
private Nachricht | Beiträge des Benutzers
tequila slammer
myCSharp.de - Member



Dabei seit:
Beiträge: 255
Herkunft: DE

Themenstarter:

beantworten | zitieren | melden

ich habe nun ein Problem mit dem Auslesen der Datenbankinformationen.
Laut den geposteten Links kann ich mit:

System.Data.OleDb.OleDbConnection verbindung = new System.Data.OleDb.OleDbConnection(connection_string);
                verbindung.Open();
                DataTable schemaTable = verbindung.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

Tabellen und deren Ansichten angezeigt bekommen.

Mein Problem ist nun wie ich die Anzahl der Tabellen und deren Namen ermitteln kann.

Mein Ansatz:

label4.Text = Convert.ToString(schemaTable.Rows.Count);

Was mache ich falsch?
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4802
Herkunft: Leipzig

beantworten | zitieren | melden

Es wäre natürlich enorm von Vorteil, wenn Du sagen würdest was geschieht.
Exception oder ähnliches?
private Nachricht | Beiträge des Benutzers
tequila slammer
myCSharp.de - Member



Dabei seit:
Beiträge: 255
Herkunft: DE

Themenstarter:

beantworten | zitieren | melden

Nun ja. Es kommt keine Fehlermeldung, weil ich noch nicht mehr habe.
Ich wollte mit

label2.Text = schemaTable.TableName;
Die Tabellennamen auslesen jedoch bekomme ich immer "Tables" zurück.
Die Tabellen heißen aber Tabelle1 und Tabelle2
private Nachricht | Beiträge des Benutzers
tequila slammer
myCSharp.de - Member



Dabei seit:
Beiträge: 255
Herkunft: DE

Themenstarter:

beantworten | zitieren | melden

Ich bin nun soweit, dass ich die Namen auslesen kann aber nicht auf die enthaltenen Datenfelder.

Leider weis ich auch nicht mehr weiter. Mein Büche geben da leider nichts mehr her. Anbei mal mein bisheriger Code:


baum.Nodes.Clear();

string connection_string = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + pfad + "; JET OLEDB:Database Password=";

System.Data.OleDb.OleDbConnection verbindung = new System.Data.OleDb.OleDbConnection(connection_string);
verbindung.Open();
 DataTable schemaTable = verbindung.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

//Mein Ansatz
DataTable schemaTableColumn = verbindung.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Columns, new object[] { null, null, null, "Field" });
                
foreach (DataRow table in schemaTable.Rows)
{
         baum.Nodes.Add(table["TABLE_NAME"].ToString());
          
         //Test
         foreach (DataColumn column in schemaTableColumn.Rows)
         {
                  baum.Nodes[0].Nodes.Add(column.ColumnName);
         }
}

verbindung.Close();

label4.Text = Convert.ToString(schemaTable.Rows.Count);

Leider verstehe ich nicht warum es nicht klappt. Keine Fehlermeldung nichts.
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4802
Herkunft: Leipzig

beantworten | zitieren | melden

Für die Spalten.

schemaTableColumn = verbindung.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "TableName", null });

TableName musst Du natürlich mit dem Namen einer echten Tabelle Deiner DB ersetzen.
private Nachricht | Beiträge des Benutzers
tequila slammer
myCSharp.de - Member



Dabei seit:
Beiträge: 255
Herkunft: DE

Themenstarter:

beantworten | zitieren | melden

Kannst du mir kurz erklären wie sich

new object[] { null, null, table["TABLE_NAME"],null }

new object[] { null, null, null, "TABLE" }
zusammensetzt?

Wovon ist abhängig? Oder gibt es Quellen wo ich das für "dummies" erklärt bekomme?
private Nachricht | Beiträge des Benutzers