Hallo,
ich arbeite zurzeit an meinem ersten Datenbank Projekt. Ich benutzte "SQL Server 2008 Express". Nun möchte ich aber aus meiner DB alle Spaltennamen auslesen, weiss aber leider nuicht wie.
Danke für die Hilfe
Im SQL Server gibt es pro Datenbank bestimmte "Systemviews". Diese beginnen immer mit INFORMATION_SCHEMA.[Name]. In deinem Falle musst du also das View INFORMATION_SCHEMA.COLUMNS benutzen.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
Danke erstmal für deine Antwort,
ich habe nun es geschafft ein SQLCommand Objekt einzurichten. Dennoch bekomme ich immer einen Error bei folgenden SQL Befehl :
SELECT * FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = [tabellenName]
ich habe es auch so versucht
SELECT * FROM [tabellenNamen].INFORMATION_SCHEMA.Columns
ich will nicht die komplette DB durchsuchen sonderen nur eine bestimmte Tabelle.
Danke 😄
Oder mach einfach ein Select * from myTable where 1=2 und hol dir eine DataTable, da stehen dann auch alle Spaltennamen drin.
ImageTools for Silverlight: http://imagetools.codeplex.com | http://www.silverdiagram.net | http://www.cleancodedeveloper.de b:::
Dennoch bekomme ich immer einen Error bei folgenden SQL Befehl :
SELECT * FROM INFORMATION_SCHEMA.Columns where TABLE_NAME = [tabellenName]
hm, was bekommst du da für einen Fehler?
Wenn du einfach nur die Spaltennamen brauchst würd ich aber auch die Lösung von malignate empfehlen, das ist am einfachsten.
hm, was bekommst du da für einen Fehler?
Würd mich auch interessieren. Denn ein einfaches
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Bla'
funktioniert ohne Probleme.
Wenn du einfach nur die Spaltennamen brauchst würd ich aber auch die Lösung von malignate empfehlen, das ist am einfachsten.
Ist aber IMHO gefuscht. Warum nicht das benutzen, was dafür vorgesehen ist?
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
Hallo Leute,
danke für eure Hilfe.
Mein Code ist zurzeit folgender :
SqlCommand cmd = new SqlCommand("SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = " + table);
cmd.Connection = tran.Connection;
cmd.Transaction = tran;
try
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
string bla = "";
while (reader.Read())
{
bla += reader.GetString(0);
}
}
}
catch (Exception e)
{
string exception = e.ToString();
}
Die Exception lautet : Ungültiger Spaltenname [table], da ist nur ne kleiner Fehler drin, aber ich habe noch kaum Erfahrung C# SQL Anweisungen durchzuführen 😄
Danke
Schau dir mal bitte [Artikelserie] Parameter von SQL Befehlen an. SQL Commands bitte nicht mit Stringverkettung zusammenfügen. Denn dann tritt unter anderen genau der Fehler auf, den du gerade hast.
Dein Fehler liegt allerdings daran, das du den Tabellennamen nicht in Hochkommas schreibst ('Tabelle'). Aber darum brauchst du dich nicht zu kümmern, wie du dem Artikel entnehmen wirst.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
Der Vollständigkeit halber möchte ich noch auf [FAQ] Tabellen- und Spalteninformationen aus dem SQL Server auslesen verweisen.
Siehe auch Wie poste ich richtig? 1.1 Erst suchen, vor allem in den FAQ
Die Exception lautet : Ungültiger Spaltenname [table], da ist nur ne kleiner Fehler drin,...
In allen Beispielen wird der Tabellenname in Hochkommata gesetzt; dies ist wichtig, weil es sich um einen String handelt, und bei dir fehlt es. Damit das nicht zu einem Problem führt, solltest du Khalids Hinweis mit den Parametern unbedingt beachten.
aber ich habe noch kaum Erfahrung C# SQL Anweisungen durchzuführen
Deshalb verweise ich auch auf [FAQ] SQL - Kurze Befehlzusammenfassung
Jürgen
Hallo Midnight Run
Ich empfehle dir die GetSchema Methode der Connection zu verwenden:
using (SqlConnection cn = new SqlConnection(@"Server=.\Sql2k8;Database=SqlServerNet;Integrated Security=sspi;"))
{
cn.Open();
string tableName = "TestData100K";
DataTable schema = cn.GetSchema("COLUMNS", new string[] { null, null, tableName });
Console.BufferWidth = 450;
foreach (DataColumn col in schema.Columns)
{
Console.Write("{0}\t", col.ColumnName);
}
Console.WriteLine();
Console.WriteLine(new string('=', 450));
foreach (DataRow row in schema.Rows)
{
foreach (DataColumn col in schema.Columns)
{
Console.Write("{0}\t", row[col]);
}
Console.WriteLine();
}
}
Console.WriteLine();
Console.ReadKey();
Weitere Informationen zu den verfügbaren Schemata findest du hier:
SQL Server Schema Collections
Informationen zu den Restriktionen findest du hier:
Schema Restrictions (ADO.NET)
Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+
Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
Danke,
es klappt auch nun. Leider bekomme ich aber komplett falsche Werte :S
//TODO SQL PROZEDUR
//Haben alle FK KEY Tabellen Einträge
int count = 1;
SqlTransaction tran = this.BeginTransaction(this.OpenConnection());
//SqlConnection con
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT * FROM Information_Schema.Columns WHERE table_name = '" + table + "'";
cmd.Connection = tran.Connection;
cmd.Transaction = tran;
try
{
List<string> columnNames = new List<string>();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
columnNames.Add(reader.GetString(0));
}
columnNames = columnNames;
}
Das ist was ich zurzeit habe. In columNames möchte ich eben alle Spaltennamen habe, dort steht aber immer nur der Name der Datenbank drin. Was mache ich falsch ?
mfg
Wenn du das so machst würd ichs mal mit reader.GetString(3) probieren.
Du fragst nämlich sonst immer nur auf die erste Spalte ab und holst damit immer nur den DB namen.
Oder:
du machst "SELECT Column_Name FROM .."
und bleibst bei GetString(0)
Wenn du das so machst würd ichs mal mit reader.GetString(3) probieren.
Du fragst nämlich sonst immer nur auf die erste Spalte ab und holst damit immer nur den DB namen.
Oder:
du machst "SELECT Column_Name FROM .."
und bleibst bei GetString(0)
Der Herr dankt, es funktionioert 😄