Bestimmte Zelle aus Datenbank (SQL) auslesen (C#)

Hi, ich hoffe man kann mir helfen, weil ich am Ende meiner begrenzten Programmierkenntnisse bin.

Ich benutze Microsoft Visual C# 2008 Express Edition und bin so weit, dass ich eine Datenbank habe, sie schon teilweise mit Daten gefüllt habe.

Ich habe es geschafft wenigstens zu ermitteln, wie viele Zeilen und Spalten die Tabelle hat, also habe ich mir überlegt, ob es nicht möglich ist eine einzelne Zelle auszulesen. Mit einer Schleife würde ich dann eine ComboBox füllen, alternativ wäre hier auch gefragt, wie man den Inhalt einer ganzen Spalte in einer Combobox packen kann, also jeder Eintrag eine Zelle.

So nun aber zu dem Code, den ich schon habe.
Durch DataBindings, wo ich versucht habe, eine Combobox mit der Tabelle zu verbinden wurde zunächst dieser Code generiert. Leider hat das nicht funktioniert. Es wird nur der oberste Eintrag angegeben und ist nicht aufklappbar.

// TODO: Diese Codezeile lädt Daten in die Tabelle "bibliothekDataSet.Volksubersicht". Sie können sie bei Bedarf verschieben oder entfernen.
 this.volksubersichtTableAdapter.Fill(this.bibliothekDataSet.Volksubersicht);

Damit kann ich jetzt aber die Anzahl der Reihen und Spalten ermitteln, nur dummerweise habe ich keine Ahnung, wo ich eine bestimme Zelle anpacken kann um die Caption zu bekommen.

Hoffe ihr versteht, was ich meine und vielleicht weiß jemand Rat, weil ich echt aufm Schlauch stehe. :frowning:

PS: Bitte keine Verweise auf anderen Webseiten, da steige ich mal gar nicht durch, hab Google schon gequält, vollkommen umsonst und bitte keine so komplexen Code-Schnipsel, danke :smile:

Hallo

Vllt. finden sich in diesem Thread die richtigen Schlagwörter: http://www.mycsharp.de/wbb2/thread.php?threadid=5686…

mfg M.L.

Hi, ich hoffe man kann mir helfen, weil ich am Ende meiner
begrenzten Programmierkenntnisse bin.

Servus,

schau ma mal was wir machen können.

Der Code den du mitgeschickt hast ist leider ziemlich spärlich.

Mit einer Schleife würde ich dann eine ComboBox
füllen,

Das ist eigendlich relativ einfach.

Da du dich über den Datenbanktyp nicht weiter auslässt geh ich im nachfolgenden Beispiel von einer MDB datei aus. (Also Grundlage zum ansprechen brauchen wir using System.Data.OleDb; )

Nehmen wir mal an du hast ein WindowsForm wo nur eine combobox angezeigt wird, diese nennen wir jetzt einfach mal cmb_Auswahl

ich würde dann in die Form_Load() folgendes reinschreiben

OleDbConnection ncon = new OleDbConnection(„Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb“);
OleDbCommand ncom = new OleDbCommand(„Select tbl_Main.Caption FROM tbl_Main“);

ncon.Open();
OleDbDataReader leser = ncom.ExecuteReader();
if(leser.HasRows)
{
while(leser.Read())
{
cmb_Auswahl.Items.Add(leser[0].ToString());
}
}else
{
MessageBox.Show(„Die Anfrag lieferte keien Daten zurück!“);
}
ncom.Dispose();
ncon.Close();
ncon.Dispose();

mit OleDb kannst du auch SQL Server ansprechen allerdings musst du dann den übergebenen Provider string ändern.

Ansonsten ist es ja relativ selbst erklärend im OleDbCommand übergibst du den SQL Query anhand der von der datenbank rückgelieferten werde wird dann ein array aufgebaut.
Um das auszulesen nehme ich dann das Objekt leser, übergebe den Index den ich gern hätte (0 = erste spalte, 1 = zweite spalte etc.) sprich
leser[0] = erste spalte
leser[1] = zweite spalte (mit der oben genutzten Abfrage funktioniert das nicht da ich nur eine Spalte im query abfrag)

anschliessend konvertiere ich das objekt in einen String mit .ToString() und adde es mittels cmb_Auswahl.Items.Add(leser[0].ToString()) in die comboboxauswahl

fertig.

Allerdings solltest du schauen das du nicht zuviel in Form_Load() reinnimmst wen es sich vermeiden lässt.

Macht das programm beim starten sehr langsam ^^

Hoffe das hat dir weitergeholfen

gruß Bytestorm

Vielen Dank Bytestorm, aber ich habe da noch ein paar Fragen und auch Anmerkungen.

Ich hab’s der Einfachheit erst mal eins zu eins kopiert. Beim starten meckert er aus gutem Grunde herum. weil er das Datenbankformat nicht kennt. Die Datei endet mit *.sdf, dadurch ist der als Provider angegebene Teil natürlich falsch.

Aber welchen Provider muss ich bestimmen, damit er es auslesen kann?
Zweitens noch diese Frage:

while(leser.Read())
{
cmb_Auswahl.Items.Add(leser[0].ToString());
}

Bezeichnet die [0] die erste Spalte der Tabelle? Problem ist doch, dass ich mehr als eine Tabelle in dieses *.sdf Format unterbringen kann, wenn ich nicht gerade total aufm Holzweg bin. Also muss ich irgendwo doch die Tabelle angeben, oder?

Wäre super wenn mir noch geholfen werden könnte. Vielen Dank aber schon mal für den geistigen Anstoß :smile:

Verdammt, noch was vergessen zu fragen :smiley:

OleDbCommand ncom = new OleDbCommand(„Select tbl_Main.Caption FROM tbl_Main“);

Ist das die SQL Anweisung, womit man eine bestimmte Tabelle auswählt, oder irre ich mich hier?

Wie gesagt wäre super wenn wer helfen könnte. :smile:

Vielen Dank Bytestorm, aber ich habe da noch ein paar Fragen
und auch Anmerkungen.

Ich hab’s der Einfachheit erst mal eins zu eins kopiert. Beim
starten meckert er aus gutem Grunde herum. weil er das
Datenbankformat nicht kennt. Die Datei endet mit *.sdf,
dadurch ist der als Provider angegebene Teil natürlich falsch.

SDF Files kenn ich jetzt so nicht aber Google gab mir mal den Provider string aus:

Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\test.sdf

musst halt den Datenbankpfad noch korrigieren

Aber welchen Provider muss ich bestimmen, damit er es auslesen
kann?
Zweitens noch diese Frage:

while(leser.Read())
{
cmb_Auswahl.Items.Add(leser[0].ToString());
}

Bezeichnet die [0] die erste Spalte der Tabelle? Problem ist
doch, dass ich mehr als eine Tabelle in dieses *.sdf Format
unterbringen kann, wenn ich nicht gerade total aufm Holzweg
bin. Also muss ich irgendwo doch die Tabelle angeben, oder?

Ja da hast du dir die Frage quasi schon selber beantwortet im nächsten Posting

Ist das die SQL Anweisung, womit man eine bestimmte Tabelle :auswählt, oder irre ich mich hier?

Das ist wie bereits erwähnt absolut korrekt

Als Beispiel:

ich habe 2 Tabellen in meiner DB

  1. Tabelle gleich tbl_Benutzer mit den Spalten Benutzername und Passwort
  2. Tabelle gleich tbl_Wohnort mit den Spalten Benutzername und Adresse

will ich nun eine liste aller benutzer mit dem zugehörigen Passwort würde ich z.B. eine abfrage im Command übergeben die so aussehen würde

Select * From tbl_Benutzer

nun hätte mein OleDbDataReader 2 Feld breite in seinem array

leser[0].ToString() wäre die erste Spalte (Benutzername) in der ausgewählten Tabelle
leser[1].Tostring() wäre die zweite Spalte (Passwort) in der ausgewählten Tabelle

will ich nun 2 tabellen hintereinander auslesen muss ich den DataReader schliessen den befehl im OleDbCommand ändern und den leser wieder ausführen

Das würde so aussehen

leser.Close();
ncom.CommandText = „Select * from tbl_Wohnort WHERE tbl_Wohnort.Benutzername = '“ + Username + „’“;
leser = ncom.ExecuteReader();
if(leser.HasRows)
{
while(leser.Read())
{
//Was du halt hier mit den Daten machen willst
}

}

Wäre super wenn mir noch geholfen werden könnte. Vielen Dank
aber schon mal für den geistigen Anstoß :smile:

Hoffe das hilft dir erstmal weiter wen nich frag einfach nochmal an

Gruß Bytestorm