myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » WPF - ListView erste Spalte in SQL Abfrage ansprechen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

WPF - ListView erste Spalte in SQL Abfrage ansprechen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18


Disko ist offline

WPF - ListView erste Spalte in SQL Abfrage ansprechen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen.

In meiner "ersten" C# WPF Anwendung lese ich Werte aus einer Access Datenbank in eine ListView nach folgendem Schema ein.

ListViewAufbau: Bindung PNummer, Vorname, Nachname
Personalnummer | Vorname | Nachname
1 Max Mustermann

Access Datenbank: Tabelle: tblPersonen
persID | persVorname | persNachname
1 Max Mustermann

Ich hatte eigentlich gedacht, dass ich es nun schaffe mit dem SQL Command:

C#-Code:
sql.CommandText = "SELECT * FROM tblPersonen WHERE persID = " + listView.SelectedItems[0];

Nur die Zeile aus der Datenbank Tabelle "tblPersonen" auszulesen, welche nach einem Klick in die ListView der persID aus der tblPersonen entspricht. Es sollte also die persID der Personalnummer(PNummer) entsprechen.

Leider klappt der Befehl nicht. Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist die Folge.

Weiß jemand was ich falsch mache bzw. kann mir jemand sagen wie ich den SQl Command richtig ausführen kann?

Vielen Dank schon einmal.
Gruß
21.01.2016 12:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
p!lle
myCSharp.de-Mitglied

avatar-3556.jpg


Dabei seit: 22.02.2007
Beiträge: 1.032
Entwicklungsumgebung: Visual Studio (Community) 2019


p!lle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie lautet die genaue Fehlermeldung?

Bitte beachten:
 [Artikelserie] SQL: Parameter von Befehlen
21.01.2016 12:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18

Themenstarter Thema begonnen von Disko

Disko ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sobald ich in die ListView auf eine beliebige Zeile klicke.

Fehlermeldung:
OleDbException wurde nicht behandelt.
Ein Ausnahmefehler des Typs "System.Data.OleDb.OleDbException" ist in System.Data.dll aufgetreten.
Zusätzliche Informationen: GUID falsch formatiert in Abfrageausdruck 'persID = { PNummer = 1, Vorname = Max, Nachname = Mustermann }'.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Disko am 22.01.2016 21:55.

21.01.2016 12:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.013
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Schau Dir den Link an, den Dir p!lle gegeben hat.

Davon abgesehen ist a) Access keine Datenbank, die man heute noch wählen sollte und b) Dein Vorgehen mehr als nur suboptimal.
Schau Dir den MVVM Pattern an, sowie  [Artikel] Drei-Schichten-Architektur

Ohne Pattern wie MVVM wirst Du keine Freude bei WPF haben und immer und immer wieder auf Probleme stoßen.
21.01.2016 13:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18

Themenstarter Thema begonnen von Disko

Disko ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für den Hinweis. Ich hab mir den Beitrag auch angeschaut, jedoch hab ich dort keine Lösung gefunden.
Sry vielleicht sehe ich auch einfach nur den Wald vor lauter Bäumen nicht mehr.

Wäre echt nett wenn Ihr da trotzdem eine Lösung oder Vorgehen hättet.

---
Ich habe hier nach einem Beispiel aus dem Buch "Einstieg in C# 2015" programmiert.
Dachte damit wäre ich so gut es geht auf dem laufenden.

Ich werde mir deine Tips bzgl. anderer Datenbank und MVVM zu Herzen nehmen.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Disko am 21.01.2016 13:51.

21.01.2016 13:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
p!lle
myCSharp.de-Mitglied

avatar-3556.jpg


Dabei seit: 22.02.2007
Beiträge: 1.032
Entwicklungsumgebung: Visual Studio (Community) 2019


p!lle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Naja, du übergibst an das SELECT den Parameter listView.SelectedItems[0] und bekommst dann im Fehler "persID = { PNummer = 1, Vorname = Max, Nachname = Mustermann }" angezeigt...

Du darfst natürlich nur eine ID übergeben.
Für das bessere verständnis:  [Artikel] Debugger: Wie verwende ich den von Visual Studio?
21.01.2016 13:58 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18

Themenstarter Thema begonnen von Disko

Disko ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja ich möchte ja auch gerne nur einen Wert, nämlich PNummer der angeklickten Zeile übergeben.
Hab da wohl irgendwo einen Denkfehler und ich komm nicht drauf. Es werden anscheinend immer alle drei übergeben.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Disko am 22.01.2016 21:56.

21.01.2016 14:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
p!lle
myCSharp.de-Mitglied

avatar-3556.jpg


Dabei seit: 22.02.2007
Beiträge: 1.032
Entwicklungsumgebung: Visual Studio (Community) 2019


p!lle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Disko:
Es werden anscheinend immer alle drei übergeben.

Es wird das übergeben, was du übergibst. Augenzwinkern

C#-Code:
listView.SelectedItems[0]

Du musst dir aus dem Element die richtige Information besorgen.
21.01.2016 14:24 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18

Themenstarter Thema begonnen von Disko

Disko ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ja leider weiß ich nicht wie man sich da die richtige Info besorgt. enttäuscht
Sicherlich muss ich ja wie mir der Debugger schon anzeigt irgendwie nur die PNummer übergeben.
Aber egal wo und wie ich die PNummer ansprechen will, es geht nicht.

Kannst du mir sagen wie die SQL-Anweisung lauten müsste?
21.01.2016 14:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
p!lle
myCSharp.de-Mitglied

avatar-3556.jpg


Dabei seit: 22.02.2007
Beiträge: 1.032
Entwicklungsumgebung: Visual Studio (Community) 2019


p!lle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Schaue dir mal folgende Klassen an:
 ListView.SelectedItems
 ListViewItem
Interessant ist in dem Zusammenhang, wie deine Daten in die ListView kommen.

Und zur Sicherheit:
 [FAQ] Wie finde ich den Einstieg in C#?

Das SQL ist prinzipiell richtig, nur wird eben der falsche Parameter hinzugefügt.
21.01.2016 15:08 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.418
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi Disko,

nimm es mir bitte nicht übel, aber wenn du nicht weißt, wie man auf eine Eigenschaft eines Objektes zugreift, dann solltest du dich ersteinmal mit den Grundlagen von C# beschäftigen, bevor du dich mit WPF oder Datenbanken auseinandersetzt. Ansonsten wirst du immer wieder frustriert vor solchen simplen Problemen stehen. Mein Tip wäre daher, ersteinmal ein C#-Buch durchzuarbeiten, z.B. das kostenlose Buch vom Rheinwerk-Verlag: Bitte schau in das Galileo <openbook>: Visual C# 2010 von Andreas Kühnel
Dann beantworten sich solche Fragen von ganz alleine.

Christian
21.01.2016 15:23 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.013
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hinter Deinem listView.SelectedItems[0] steckt eben nicht eine ID, was Du erwartest, sondern ein Objekt.
Du darfst dem SQL aber kein Objekt übergeben, sondern eben die ID.

Du musst also zuerst aus dem Objekt die ID holen.
Ich kenn das Objekt nicht; könnte aber so aussehen...

C#-Code:
Guid id = listView.SelectedItems[0].PNummer;

Und die Id gibst Du dann korrekterweise als Parameter dem SQL Befehl.

Ich kann mir nicht vorstellen, dass das in dem Buch falsch drin steht ;-)
21.01.2016 15:25 Beiträge des Benutzers | zu Buddylist hinzufügen
p!lle
myCSharp.de-Mitglied

avatar-3556.jpg


Dabei seit: 22.02.2007
Beiträge: 1.032
Entwicklungsumgebung: Visual Studio (Community) 2019


p!lle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
Ich kenn das Objekt nicht; könnte aber so aussehen...

Die 'Zeilen' einer ListView unter WinForms sind immer vom Typ ListViewItem.
Die einzelnen 'Zellen' sind in der Property SubItems hinterlegt, welche wiederum vom Typ ListViewSubItem sind.


EDIT: Ich sehe gerade, dass es ja um WPF geht. Also ist die Ausage an dieser Stelle Blödsinn.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von p!lle am 21.01.2016 17:27.

21.01.2016 15:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18

Themenstarter Thema begonnen von Disko

Disko ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für die ganzen Tipps. Ich hab nun echt einiges ausprobiert. Wenn ich PNummer irgendwo anhänge kommt immer "object" enthält keine Definition für "PNummer",...
Ich komme da leider zu keiner Lösung.

In dem Buch ist leider zum großteil alles eher auf WinForms bezogen. Ich möchte gerne mit WPF arbeiten. Ich werde mir aber alles noch einmal angucken. Augenzwinkern
21.01.2016 17:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
p!lle
myCSharp.de-Mitglied

avatar-3556.jpg


Dabei seit: 22.02.2007
Beiträge: 1.032
Entwicklungsumgebung: Visual Studio (Community) 2019


p!lle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich muss jetzt leider MrSparkle zustimmen. Was du machst, ist grade nur Rätselraten.

Da in der ListView alles mögliche angezeigt werden kann, ist das SelectedItem bzw. sind die Elemente in der Liste SelectedItems vom Typ object. Es muss erst in den entsprechenden Typ gecastet werden, der in die ListView reingehängt wurde.
 [FAQ] Casten aber richtig: () / is / as

Ich würde dir aber empfehlen, nochmal einen Schritt zurückzugehen und etwas einfacheres auszuprobieren, ansonsten kommst du nur von einem Problem zum nächsten, weil einfach Grundlagen fehlen. fröhlich
21.01.2016 17:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.418
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Disko:
In dem Buch ist leider zum großteil alles eher auf WinForms bezogen. Ich möchte gerne mit WPF arbeiten. Ich werde mir aber alles noch einmal angucken. ;)

Wenn du das Buch vom Rheinwerk-Verlag meinst: WPF wird dort ab dem 16. Kapitel behandelt. Du solltest dich zunächst ersteinmal mit den vorherigen 15 Kapiteln beschäftigen.
21.01.2016 18:03 Beiträge des Benutzers | zu Buddylist hinzufügen
Ezio Ezio ist männlich
myCSharp.de-Mitglied

avatar-3575.png


Dabei seit: 28.08.2014
Beiträge: 189
Entwicklungsumgebung: VS 2013


Ezio ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von MrSparkle:
Wenn du das Buch vom Rheinwerk-Verlag meinst:

Ich denke, er meint "Einstieg in Visual C#" auch von Rheinwerk. (siehe 3. Post von Disko)
Die Versionen dieses Buches, die ich in den Händen hielt, haben nur auf WinForms gesetzt.

@Disko: Schau dir wirklich mal "Visual C# - Das umfassende Handbuch" von Rheinwerk an.
Das beschäftigt sich viel tiefergehender mit den grundlegenden Themen (hat aber leider keine Übungen etc. und ist viel theoretischer).
22.01.2016 10:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18

Themenstarter Thema begonnen von Disko

Disko ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
Davon abgesehen ist a) Access keine Datenbank, die man heute noch wählen sollte...

Welches DBMS wäre denn zu empfehlen?
Das Programm soll später lokal also an einem PC ohne Internet Zugriff laufen. Wäre MS SQL eine bessere Wahl?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Disko am 23.01.2016 08:19.

23.01.2016 08:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.672
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn nur dein Programm eine Datenbank benötigt, dann würde ich eine sog.  Embedded Database dir empfehlen, z.B. SQLite oder MS SQL Server Compact.
Jedes volle DBMS müßte ja erst auf dem Rechner installiert (+ administriert) werden.
23.01.2016 10:36 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Jamikus Jamikus ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.11.2012
Beiträge: 232
Entwicklungsumgebung: MS Visual
Herkunft: Oberhausen (NRW)


Jamikus ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

23.01.2016 10:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Disko
myCSharp.de-Mitglied

Dabei seit: 21.01.2016
Beiträge: 18

Themenstarter Thema begonnen von Disko

Disko ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Alles klar, Danke. Dann stell ich das nun wo alles noch übersichtlich ist gleich mal um.
23.01.2016 12:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Jahre.
Der letzte Beitrag ist älter als 4 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 09.08.2020 09:48