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
Und wo ist jetzt genau Dein Problem? Kommt ein Fehler oder ähnliches?
bisher nicht. Mein Problem ist, dass ich keinen Ansatz dafür finde ganze Tabellennamen und deren Feldnamen auszulesen.
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
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.
danke vielmals.
Die Suche hatte ich benutzt aber gänzlich in die falsche Richtung gesucht.
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?
Es wäre natürlich enorm von Vorteil, wenn Du sagen würdest was geschieht.
Exception oder ähnliches?
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
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. 🤔
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. 😉
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?