Laden...

Tabellen in Datenbank auflisten.

Erstellt von Scarface vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.375 Views
S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren
Tabellen in Datenbank auflisten.

Kann ich alle in der Datenbank enthaltenen Tabellen irgendwie herausbekommen?
Gibt's da was in C# oder geht das irgendwie über ein SQL-Kommando?

N
4.644 Beiträge seit 2004
vor 18 Jahren
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Hab ich auch schon versucht. Da kommt immer "Datei ...Eigene Dateien\INFORMATION_SCHEMA.mdb nicht gefunden."

N
4.644 Beiträge seit 2004
vor 18 Jahren

Kannst Dir auch mal OleDbConnection.GetOleDbSchemaTable(...) anschauen.

726 Beiträge seit 2003
vor 18 Jahren

hallo,
probiere mal


use db_name
Exec SP_Tables

das gibt mir alle tabellen aus der DB

gerade im Query analyzer getestet

N
4.644 Beiträge seit 2004
vor 18 Jahren

Das ist aber DB-abhängig. Die Information_Schemas sollten überall vorhanden sein. Und wie Du ja siehst, nutzt er eine Access DB.

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Funktioniert auch nicht.
Vielleicht sollte ich dazusagen, dass es ne Access DB ist.

GetOleDbSchemaTable werd ich mir mal anschauen.

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Scheint so als könnte Access das OleDbSchemaTable nicht:
The {e93a23e8-e2e5-4030-ab2a-1e2d36ebc676) OleDbSchemaGuid is not a supported schema by the 'Microsoft.Jet.OLEDB.4.0' provider.

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

So ähnlich hatte ich das ja auch. Hab's jetzt mal so wie in dem Bsp probiert. Geht aber leider auch nicht. Selber Fehler.

22 Beiträge seit 2004
vor 18 Jahren

Du musst ADOX benutzen , dann geht es relativ einfach

ADOX.Catalog catalog = new ADOX.Catalog();
ADODB.Connection conn = new ADODB.Connection();
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\testdb.mdb";
conn.Open(null,null,null,0);

listBox1.Items.Clear();
catalog.ActiveConnection = conn;

for (int i = 0; i < catalog.Views.Count; i++)
{
listBox1.Items.Add(catalog.Views[i].Name);[/i]
listBox1.Items.Add(" Erstellt am: " + catalog.Views[i].DateCreated);[/i]
listBox1.Items.Add(" Änderung am: " + catalog.Views[i].DateModified);[/i]
listBox1.Items.Add(" SQL : " + (catalog.Views[i].Command as ADODB.Command).CommandText);[/i]
for (int j = 0; j < (catalog.Views[i].Command as ADODB.Command).Properties.Count; j++)[/i]
{
try
{
listBox1.Items.Add(" Property (" + (catalog.Views[i].Command as ADODB.Command).Properties[j].Name + ";) : " + [/i]
(catalog.Views[i].Command as ADODB.Command).Properties[j].Value.ToString());}[/i]
catch {}
}
}
}

Bis denn

Cypher

C# Padawan

N
4.644 Beiträge seit 2004
vor 18 Jahren

Das muss er nicht benutzen.

OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] {null, null, null, "TABLE"});
conn.Close();

Da halte ich diese Version doch um einiges einfacher.

22 Beiträge seit 2004
vor 18 Jahren

Da muss ich dir recht geben

Ist echt einfacher 😉

Bis denn

Cypher

C# Padawan

S
Scarface Themenstarter:in
186 Beiträge seit 2005
vor 18 Jahren

Ja, funktioniert. Danke.

Mein Fehler lag bei dem Guid ( con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables...)