Laden...

Wie Datenbankfelder auslesen

Erstellt von tequila slammer vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.990 Views
T
tequila slammer Themenstarter:in
253 Beiträge seit 2006
vor 17 Jahren
Wie Datenbankfelder auslesen

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

N
4.644 Beiträge seit 2004
vor 17 Jahren

Und wo ist jetzt genau Dein Problem? Kommt ein Fehler oder ähnliches?

T
tequila slammer Themenstarter:in
253 Beiträge seit 2006
vor 17 Jahren

bisher nicht. Mein Problem ist, dass ich keinen Ansatz dafür finde ganze Tabellennamen und deren Feldnamen auszulesen.

476 Beiträge seit 2004
vor 17 Jahren

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

N
4.644 Beiträge seit 2004
vor 17 Jahren
T
tequila slammer Themenstarter:in
253 Beiträge seit 2006
vor 17 Jahren

danke vielmals.

Die Suche hatte ich benutzt aber gänzlich in die falsche Richtung gesucht.

T
tequila slammer Themenstarter:in
253 Beiträge seit 2006
vor 17 Jahren

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?

N
4.644 Beiträge seit 2004
vor 17 Jahren

Es wäre natürlich enorm von Vorteil, wenn Du sagen würdest was geschieht.
Exception oder ähnliches?

T
tequila slammer Themenstarter:in
253 Beiträge seit 2006
vor 17 Jahren

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

T
tequila slammer Themenstarter:in
253 Beiträge seit 2006
vor 17 Jahren

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. 🤔

N
4.644 Beiträge seit 2004
vor 17 Jahren

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. 😉

T
tequila slammer Themenstarter:in
253 Beiträge seit 2006
vor 17 Jahren

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?