Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
dataGridView aus einer Datenbank befüllen
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

dataGridView aus einer Datenbank befüllen

beantworten | zitieren | melden

verwendetes Datenbanksystem: MS-Access

Schönen Tag werte Kollegen!

Ich verzweifle langsam an einem eigentlich so leichtem Stück Programmcode, und hoffe ihr könnt mich darauf hinweisen, was ich zu übersehen scheine! Ich poste es mal:


com.CommandText = "SELECT strForename, strName FROM members WHERE  intNumber =" +comboBox2.SelectedItem.ToString();
             
             if (ds.Tables["Name"] != null)
             {
                 ds.Tables["Name"].Clear();
             }
             
             ds.Clear();
             da.Fill(ds, "Name");

             dataGridView1.DataSource = ds.Tables["Name"];

Soll nichts weiter tun als aus einer Access-Datenbank (über Oledb-Objekt) den dgv zu befüllen. Das Programm lässt sich ausführen, es stürtzt bei den betreffenden Zeilen nichteinmal ab, der dgv bleibt lediglich leer auch wenn er die richtigen Spaltennamen bereits anzeigt. Wieso?

Danke schonmal im voraus,
Lg Arco
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

weil deine selectabfrage flasch ist. um genau zu sein die wherebedingung. versuche es mal mit "Like" anstatt dem "="

außerdem kann ich dir nur das da ans herz legen: [Artikelserie] Parameter von SQL Befehlen
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

Mit Like stürzt er ab bei der Befehlszeile, außerdem funktionieren andere SQL-Befehle bereits mit der Formulierung WHERE intNumber = " +....

Den Link werde ich mir mal ansehen, ansonsten bleibt meine Frage bestehen!

Danke für die Mühe!
private Nachricht | Beiträge des Benutzers
unclesam
myCSharp.de - Member



Dabei seit:
Beiträge: 238
Herkunft: Nassau

beantworten | zitieren | melden

sieht für mich auch nach falscher query aus. unbedingt parameter benutzen. erleichtern wirklich das leben.
heute code ich, morgen debug ich und übermorgen cast ich die königin auf int
private Nachricht | Beiträge des Benutzers
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3358
Herkunft: Berlin

beantworten | zitieren | melden

Hallo,

was liefert denn SelectedItem? Passt vielleicht SelectedIndex besser oder sogar SelectedText?

Unabhängig davon sind wirklich SQL-Parameter dringendst zu empfehlen! Jürgen
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat
Mit Like stürzt er ab bei der Befehlszeile, außerdem funktionieren andere SQL-Befehle bereits mit der Formulierung WHERE intNumber = " +....

integervergleiche != stringvergleiche
wenn du verstehst, was der ausdruck bedeutet.



zeig mal, wie du das like verwendet hast?
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

@juetho
die comboBox2 ist gefüllt mit zahlen. (genauer gesagt mit startnummern, und ich möchte einfach zu der ausgewählten startnummer den vor- und nachnamen haben (strForename, strName))
Hab bereits überprüft ob er den richtigen Wert aus der combobox bekommt, indem ichs in eine String Variable zwischengespeichert hab und in einer textBox ausgeben hab lassen, das passt!

ich hab bereits versucht das ausgelesene aus der CB in int32 zu convertieren, lässt er mich aber nicht. ich werde selectedtext und selectedindex mal ausprobieren

@jackolena:

nachdem du mir gesagt hast das "=" mit "like" zu ersetzen, sah das dann so aus:


com.CommandText = "SELECT strForename, strName FROM members WHERE intNumber LIKE " +comboBox2.SelectedItem.ToString();
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Arco am .
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

ja, das habe ich mir gedacht. strings müssen in in sql in ' eingeschlossen sein, wenn du sie verwenden willst.
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3358
Herkunft: Berlin

beantworten | zitieren | melden

Zitat von JAck30lena
ja, das habe ich mir gedacht. strings müssen in in sql in ' eingeschlossen sein, wenn du sie verwenden willst.
Jack wollte eigentlich noch so etwas hinzufügen:

Aber auch damit das nicht beachtet werden muss, sind Parameter vorzuziehen.

Jürgen
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat
Aber auch damit das nicht beachtet werden muss, sind Parameter vorzuziehen.


bin vollständig deiner meinung.
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

Interessant! obacht:

bisher war der betreffende Codeabschnitt in der Combobox2SelectedIndexChanged Methode.
ich habe ihn jetzt probeweise in einen Button1_click Methode hineingeschrieben, so dass ich praktisch zuerst die zahl in der combobox aussuche, den button drücke, und er dann sucht.
Das funktioniert! mit dem selben code, 1 zu 1 copy-paste (nur mit con.open und con.close zusätzlich)

wie kann das sein?
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

andere frage, wie kommst du auf die Idee, es würde nicht funktionieren?

Die Infos holst du dir ja von der selben stelle, der einzige Unterschied ist eben das "Wann" du dir die Daten holst. (nicht beim wechseln, sondern eben bei einem Klick auf den Button)
lg Lion
private Nachricht | Beiträge des Benutzers
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

wie ich auf die idee komme das es nicht funktioniert?
er tut es nicht! ^^ das dataGridView bleibt leer, solange der Code im Combobox2IndexChanged Objekt steht! ^^
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Was nun?
Zitat
Das funktioniert! mit dem selben code, 1 zu 1 copy-paste (nur mit con.open und con.close zusätzlich)
Zitat
er tut es nicht! ^^ das dataGridView bleibt leer, solange der Code im Combobox2IndexChanged Objekt steht! ^^

Dann sorry für meine "blöde" Frage, aber für mich sind das zwei gegensprüche :)
Dann debugge doch mal die Stelle an und guck dir an, wie dein Select Statement am ende aussieht bzw. was dein SelectedItem aussieht.
lg Lion
private Nachricht | Beiträge des Benutzers
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

^^ du hast völlig recht, es ist ein widerspruch!

*seufz* soweit wollte ich euch da gar nicht mit rein ziehen! wir haben probleme mit unserem Compiler, und führen das Programm stets ohne den debugger aus! ist ein häufiges problem an meiner schule hier!

was hat das jetzt zur folge, was beduetet das für das programm?
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Dann mach es doch "Quick&Dirty", mach eine MessageBox, wo die Infos drinstehen..

Eigentlich sollte im SelectedItem so oder so die gewünschte Number drinstehen.
Eventuell kannst du ja den entsprechenden Code Abschnitt zeigen (so wie es jetzt aussieht).
lg Lion
private Nachricht | Beiträge des Benutzers
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

Eine message box? ich werde den gedanken behalten, danke! Quick & Dirty ist genau das was ich will ^^ aber dazu brauch ich vermutlich etwas zeit das auszuprogrammieren



an dem Code hat sich nichts geändert (wie oben gepostet) er steht nur an einer anderen stelle, oder versteh ich dich nicht richtig?
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat
aber dazu brauch ich vermutlich etwas zeit das auszuprogrammieren

????

MessageBox.Show("das was ich anzeigen lassen will");
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Zitat
Eine message box? ich werde den gedanken behalten, danke! Quick & Dirty ist genau das was ich will ^^ aber dazu brauch ich vermutlich etwas zeit das auszuprogrammieren

Hallo? sorry aber eine Messe box sollte man schon kennen... MessageBox.Show(). Guck dir das mal an.

bzw. du kannst auch im Relase Modus debuggen, nur da kannst du halt nichts ändern.

Lion
lg Lion
private Nachricht | Beiträge des Benutzers
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

ja du hast wohl recht, ich werd mich jetzt mal dran versuchen!

was für vorteile bringt mir die message box?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Arco am .
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

wenn du uns nicht unterstützen willst (mit Informationen) dann können wir dir wohl auch herzlich wenig helfen, sorry aber eine Aussage, dass eine Messagebox "nicht einfach zu implementieren" ist halte ich nur für Faul, überhaupt wenn man den SQL String wissen möchte.

Da klatschte den vorgeschlagenden Code hin MessageBox.Show() mit deinem SQL Text als Parameter, wo wäre da das Problem bzw. wo ist das "nicht einfache"?

Wenn du öfters in dgv schreibst, vielleicht löscht dir ja eine andere Methode die Zeilen wieder raus.

Lion

€dit: Meine ersten Zeilen beziehen sich auf das ungeänderte Kommentar von Acor, werde es wohl aber auch so stehen lassen. :)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Lion1984 am .
lg Lion
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

du hast doch geschrieben, das du aufgrund eines unbekannten fehlers, nciht debuggen kannst. also ist die ausgabe durch die messagebox deine einzige möglichkeit zu einem bestimmten zeitpunkt definierte werte zu erfahren.

es gibt zwar noch andere möglichkeiten wie tracing usw aber das wäre hier jetzt zu kompliziert für dich.

im übrigen tendiert dieser thred stark richtung
Wichtig: [Hinweis] Wie poste ich richtig?
Punkt 1.1
Punkt 1.1.1
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Zitat
was für vorteile bringt mir die message box?

Wenn du nicht debuggen kannst? Dann siehst du eventuell Informationen die du gerne wissen möchstest, wie z.B. den SQL String an dieser Stelle, oder den Inhalt von SelectedItem, etc. dargestellen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Lion1984 am .
lg Lion
private Nachricht | Beiträge des Benutzers
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

Entschuldigt, ich hab MessageBox gerade mit RichEdit (oder sowas) verwechselt! knoten im kopf, pardon

also ich hab messagebox.show(...) verwendet und er zeigt ihn mir an, der sql befehl passt soweit!
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Dann würde ich trotzdem vorschlagen, dass du den ButtonClick Code postest, denn entweder hast du "drumherum" einen Fehler oder du löscht die Table von wo anders.

Ansonsten eben gesehen:

if (ds.Tables["Name"] != null)
             {
                 ds.Tables["Name"].Clear();
             }

             ds.Clear();
Hier wäre das If und Tables[""].Clear() doch unnötig, da ds.Clear() sowieso alle reihen aus allen Tabellen löscht.

Lion
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Lion1984 am .
lg Lion
private Nachricht | Beiträge des Benutzers
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

Ich bin das Problem umgangen!
Ich verzichte darauf die Daten ins DGV zu schreiben, da das ja offenbar aus unerklärlichen gründen nicht funktioniert. ich übertrage das Ergebnis der SELECT answeisung einfach direkt in einen String

string name = ds.Tables["Name"].Rows[0]["strForename"].ToString() + " " + ds.Tables["Name"].Rows[0]["strName"].ToString();

das ist in Ordnung so

Die redundante If-Anweisung hab ich wie empfohlen gelöscht, danke!


soweit funktioniert jetzt alles, ich danke euch für eure Hilfe
bis bald ;-)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Arco am .
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Wenn es so funktioniert, dann vermute ich, dass du das DGV an anderer Stelle löscht.

Unerklärlich ist es sicher nicht, wir kennen halt das drum herum nicht :D
lg Lion
private Nachricht | Beiträge des Benutzers
Arco
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

Vermutlich hast du recht dass es eine Erklärung gibt! Löschen ist es nicht, darauf hab ich geachtet!

Ich bin euch wirklich dankbar für euche Hilfe! tolles Forum

lg Arco
private Nachricht | Beiträge des Benutzers