Benutzer mit den meisten Antworten
<List> -> DataTable -> Listbox

Frage
-
Hallo Zusammen,
ich stehe vor einem für mich schier unlösbarem Problem. Ich habe eine Tabelle in einer DB wo ich die Spaltennamen auslesen muss.
Diese Spaltennamen sollen über eine <List> Funktion an eine ListBox weitergegeben werden. Lt. SQL Management Studio funktioniert meine Abfrage und ich erhalte auch in meiner Schleife die exakte Anzahl an Datensätzen.
Leider scheitere ich momentan daran die Namen der Spalten auch nur Halbwegs in die Listbox zu packen. Es kommt immer nur Quatsch dabei raus. Vielleicht fällt euch ein Fehler auf den ich bislang übersehen habe.
Vorab hatte ich das Ganze mit OleDB realisiert, aber das läuft nicht mehr seitdem ich mein System neu aufsetzen musste.....
Hier der Source:
public static List<string> GetColumns() { List<String> Columns = new List<String>(); SqlConnection sqlCon = new SqlConnection(); sqlCon.ConnectionString = Properties.Settings.Default.strConnectionString; //string strSQL = "SELECT table_name = sysobjects.name, column_name=syscolumns.name FROM sysobjects JOIN syscolumns on sysobjects.id = syscolumns.id WHERE SYSOBJECTS.NAME = 'tbl_Zusatzkosten'"; string strSQL = "SELECT table_name = sysobjects.name, column_name=syscolumns.name FROM sysobjects JOIN syscolumns on sysobjects.id = syscolumns.id WHERE SYSOBJECTS.NAME = 'tbl_Zusatzkosten'"; SqlCommand cmd = new SqlCommand(strSQL, sqlCon); sqlCon.Open(); SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly); DataTable table = dr.GetSchemaTable(); for ( int col = 0; col <= table.Rows.Count; col++) { for (int idr = 0; idr <= table.Rows.Count; idr++) { Columns.Add(table.Columns[1].ToString()); } } return Columns;
Und der Aufruf in der ListBox:
foreach (string i in clsGetColumnNames.GetColumns()) { listBox1.Items.Add(i); }
Für jeden Ratschlag bin ich euch schonmal sehr dankbar.
Grüße
Dom
C# und VB.NET sind wie eine Schachtel Pralinen, ich weiß nie was ich bekomme xD
Antworten
-
Danke erstmal für die Antworten,
die Abfrage findet in einer gesondeten Klasse statt. Mit einem Array hab ich das noch weniger hinbekommen da ich da mit dem Return probleme bekam und ich beim besten willen nicht wusste wie ich das regeln kann.
Ich versuche mal deinen Source zu implementieren und markiere deinen Beitrag als Antwort wenn es geklpatt hat, sonst melde ich mich nochmal.
Vielen lieben Dank :)
[Edit]
Denkbar einfach -.-:
public static List<string> GetColumns() { List<String> Columns = new List<String>(); SqlConnection sqlCon = new SqlConnection(); sqlCon.ConnectionString = Properties.Settings.Default.strConnectionString; //string strSQL = "SELECT table_name = sysobjects.name, column_name=syscolumns.name FROM sysobjects JOIN syscolumns on sysobjects.id = syscolumns.id WHERE SYSOBJECTS.NAME = 'tbl_Zusatzkosten'"; string strSQL = "SELECT table_name = sysobjects.name, column_name=syscolumns.name FROM sysobjects JOIN syscolumns on sysobjects.id = syscolumns.id WHERE SYSOBJECTS.NAME = 'tbl_Zusatzkosten'"; SqlCommand cmd = new SqlCommand(strSQL,sqlCon); sqlCon.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Columns.Add(dr[1].ToString()); /*DataTable table = new DataTable(); table.Columns.Add(dr[1].ToString()); for (int col = 0; col <= table.Rows.Count; col++) { for (int idr = 0; idr <= table.Rows.Count; idr++) { } }*/ } return Columns; }
Ohne DataTable etc. einfach nur den Reader lesen lassen.
Dominik
C# und VB.NET sind wie eine Schachtel Pralinen, ich weiß nie was ich bekomme xD- Als Antwort markiert Dom2011 Samstag, 14. Mai 2011 21:08
Alle Antworten
-
Hi,
um die Spaltennamen einer Tabelle zu ermitteln, kannst Du auch einfach das hier nehmen:
Dim ColumnsTable As DataTable Dim ConnectionString As String = "SERVER=<ServerNameOderIp>;UID=<Username>;PWD=<Passwort>;DATABASE=<Datenbank>" Dim Connection As New SqlConnection( ConnectionString ) Connection.Open() ColumnsTable = Connection.GetSchema( "AllColumns", New String() { Nothing, Nothing, "qryTest", Nothing } ) ... ColumnsTable.Dispose() Connection.Close() Connection.Dispose()
bzw. (da ich mal wieder übersehen habe, dass ich im C# Forum bin :):
DataTable ColumnsTable; string ConnectionString = "SERVER=<ServerNameOderIp>;UID=<Username>;PWD=<Passwort>;DATABASE=<Datenbank>"; SqlConnection Connection = new SqlConnection(ConnectionString); Connection.Open(); ColumnsTable = Connection.GetSchema( "AllColumns", new string[] { null, null, "qryTest", null } ); ... ColumnsTable.Dispose(); Connection.Close(); Connection.Dispose();
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi,
Diese Spaltennamen sollen über eine <List> Funktion an eine ListBox weitergegeben werden.
warum zwingend List<T>?
Und was kommt bei deiner Variante raus?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Danke erstmal für die Antworten,
die Abfrage findet in einer gesondeten Klasse statt. Mit einem Array hab ich das noch weniger hinbekommen da ich da mit dem Return probleme bekam und ich beim besten willen nicht wusste wie ich das regeln kann.
Ich versuche mal deinen Source zu implementieren und markiere deinen Beitrag als Antwort wenn es geklpatt hat, sonst melde ich mich nochmal.
Vielen lieben Dank :)
[Edit]
Denkbar einfach -.-:
public static List<string> GetColumns() { List<String> Columns = new List<String>(); SqlConnection sqlCon = new SqlConnection(); sqlCon.ConnectionString = Properties.Settings.Default.strConnectionString; //string strSQL = "SELECT table_name = sysobjects.name, column_name=syscolumns.name FROM sysobjects JOIN syscolumns on sysobjects.id = syscolumns.id WHERE SYSOBJECTS.NAME = 'tbl_Zusatzkosten'"; string strSQL = "SELECT table_name = sysobjects.name, column_name=syscolumns.name FROM sysobjects JOIN syscolumns on sysobjects.id = syscolumns.id WHERE SYSOBJECTS.NAME = 'tbl_Zusatzkosten'"; SqlCommand cmd = new SqlCommand(strSQL,sqlCon); sqlCon.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Columns.Add(dr[1].ToString()); /*DataTable table = new DataTable(); table.Columns.Add(dr[1].ToString()); for (int col = 0; col <= table.Rows.Count; col++) { for (int idr = 0; idr <= table.Rows.Count; idr++) { } }*/ } return Columns; }
Ohne DataTable etc. einfach nur den Reader lesen lassen.
Dominik
C# und VB.NET sind wie eine Schachtel Pralinen, ich weiß nie was ich bekomme xD- Als Antwort markiert Dom2011 Samstag, 14. Mai 2011 21:08
-
Hallo,
ich bekomm das so nicht "übersetzt". Allerdings müsste es doch eine Möglichkeit geben das entweder in eine List, ein Dictionary oder ein Array zu bekommen!?!?
Ideal wäre ein Array. Aber wie gebe ich dann dort das return aus der Klasse an die Form, respektive an die ListBox?
Grüße,
Dom
C# und VB.NET sind wie eine Schachtel Pralinen, ich weiß nie was ich bekomme xD