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. :(
 

Lime

frisch fruchtig
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:

zorey

Grünschnabel
Ok, sowas hatte ich auch irgendwo gelesen gehabt. Ich weiss nur nicht, wie das alles mit Sqlconnection in eine List reingepackt soll in C#.
 

zorey

Grünschnabel
Ich merke gerade da gab es ein Missverständnis. Ich wollte alle Tabellennamen aus der Datenbank und nicht die Spaltennamen aus einer Tabelle.
 

Lime

frisch fruchtig
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
}
 

zorey

Grünschnabel
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?
 

Lime

frisch fruchtig
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:

zorey

Grünschnabel
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();
 

Lime

frisch fruchtig
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'
 

zorey

Grünschnabel
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: