Alle Tabellennamen auslesen aus einer Mssql Datenbank .mdf mit C#

zorey

Grünschnabel
Hi zusammen,

ich beschäftige mich seit kurzem mit C# und habe daher nicht so viel Kenntnisse in C# mit Verknüpfung zu Datenbanken.

Ich würde gerne alle Tabellennamen aus einer Mssql Datenbank (.mdf) auslesen und die als String in ein Array oder List reinpacken.

Ich hoffe jemand kann mir helfen, weil ich an diesem Problem seit 2 Tagen sitze und nicht weiter komme. :(
 
Für gewöhnlich stehen die Spaltennamen alle im information_schema. Somit sollte folgende Abfrage funktionieren:

SQL:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table_name'
 
Zuletzt bearbeitet von einem Moderator:
Ok, sowas hatte ich auch irgendwo gelesen gehabt. Ich weiss nur nicht, wie das alles mit Sqlconnection in eine List reingepackt soll in C#.
 
Ich merke gerade da gab es ein Missverständnis. Ich wollte alle Tabellennamen aus der Datenbank und nicht die Spaltennamen aus einer Tabelle.
 
Entwickelst du eine Webanwendung, also auf Basis von .aspx?
Ich kenn mich damit auch nicht sonderlich aus, ich habe das nur einmal angekratzt, als ich es ausprobiert habe.
Hier ein Codeschnippsel, den ich noch gefunden habe. Vielleicht hilfts dir weiter:
C#:
SqlConnection C = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\SJ_201011\\Informatik\\db\\Datenbank\\Datenbank\\App_Data\\ASPNETDB.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True");
C.Open();

SqlCommand Command = new SqlCommand("SELECT * FROM guestbook", C);
SqlDataReader Reader = Command.ExecuteReader();
while (Reader.Read())
{
     //Zellen füllen, oder so
}
 
Ja genau. War auch schon soweit und komme an der Stelle nicht mehr weiter, weil ich nicht weiss wie ich alle Tabellennamen lesen kann. Ich müsste man ja in der Schleife nur List.add(Tabellenname) einfügen. Wie bekomme ich nun alle Tabellennamen in den Reader?
 
Ach sorry, hab ich mich verlesen. Das Prinzip ist dasselbe, nur noch einfacher.

SQL:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='datenbankname'

Im INFORMATION_SCHEMA stehen alle wichtigen Daten, da kannst du sonst auch einfach die Sache auslesen.
Bei MySQL würde es noch einfacher gehen:
SQL:
SHOW ALL TABLES

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Ich bekommen irgendwie nichts rein in den Reader. Jedenfalls gibt er nichts aus.

Code:
String connectionstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database_verkehrsdaten.mdf;Integrated Security=True;User Instance=True";
    SqlConnection connection = new SqlConnection(connectionstring);
    connection.Open();
    SqlCommand Command = new SqlCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='Database_verkehrsdaten'", connection);
    SqlDataReader Reader = Command.ExecuteReader();
    
     
        while (Reader.Read())
    {
        Response.Write(Reader.ToString());
    }

    connection.Close();
 
Du musst im Query eigentlich keine DB mehr angeben, wenn du sie schon auswählst. Fällt mir gerade so auf. Bin mir aber nicht sicher ob es daran liegt. Ich kenn mich eigentlich nur mit MySql aus und nicht mit MsSql. Du musst einfach mal schauen, ob du dort auch das Information_Schema vorliegen hast und ob die Feldernamen passen.

SQL:
SELECT * FROM TABLES WHERE TABLE_SCHEMA='Database_verkehrsdaten'

Ich hab jetzt mal alle Felder ausgelesen, weil ich glaube, Mysql hat ein Problem mit dem TABLE_NAME. Probier es mal so...

Gedankenblitz:
SQL:
SELECT `TABLE_NAME` FROM `TABLES` WHERE `TABLE_SCHEMA`='Database_verkehrsdaten'
 
Es kommt zu einem Syntaxfehler bei "Tables"

So ich habe es endlich :).

Code:
String connectionstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database_verkehrsdaten.mdf;Integrated Security=True;User Instance=True";
    SqlConnection connection = new SqlConnection(connectionstring);
    connection.Open();
    SqlCommand Command = new SqlCommand("select TABLE_NAME from INFORMATION_SCHEMA.Tables WHERE Table_Type = 'BASE TABLE' ORDER By TABLE_NAME ASC", connection);
    SqlDataReader Reader = Command.ExecuteReader();
    
     
        while (Reader.Read())
    {
        Response.Write(Reader[0]+"<br>");
    }

    connection.Close();

bekomme wie gewünscht alle Tabellennamen angezeigt.

Bevor ich es vergesse. Danke für die Hilfe. :)
 
Zuletzt bearbeitet von einem Moderator:
Zurück