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# » Wie kann ich im WPF mich an einer Datenbank einloggen und die Daten anzeigen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich im WPF mich an einer Datenbank einloggen und die Daten anzeigen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
DerMax DerMax ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.03.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Dortmund


DerMax ist offline

Wie kann ich im WPF mich an einer Datenbank einloggen und die Daten anzeigen?

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

Hallo Community,

ich bin neu hier und in der Welt des Programmierens (bin noch am Lernen) und möchte am besten mit einer bzw. gleich zwei doofen Fragen beginnen. Hoffe ich bin hier richtig...

Ich arbeite mit Visual Studio 2019 (WPF) und Microsoft SQL Server Express und möchte ein Haushaltsbuch programmieren.

Frage 1 (Userabfrage für Login):
wie bewerkstellige ich am Besten den Login?
Ich habe schon viel ausprobiert, gelesen und Videos geschaut, nur bekomme ich es nicht hin, das mehrere User in der Datenbank überprüft werden. Leider gibt es da keine Schrittweise Lösung meines Problems. Oder ich bin zu doof zum suchen...
Für meinen Test habe ich zwei verschiedene User:
User1 - Benutzername: admin - Passwort: admin
User2 - Benutzername: user - Passwort: user
User1 kann sich prima anmelden, User2 bekommt ne Exception...
Ich möchte einfach eine beliebig erweiterbare und anpassbare (hinzufügen, bearbeiten, löschen durch ein extra Fenster) Datenbank mit verschiedenen Usern nutzen

Frage 2 (Werte (dauerhaft) anzeigen lassen, hinzufügen und bearbeiten durch extra Fenster):
Für die einzelnen Einnahmen und Ausgaben möchte ich im Programm 2 DataGrids(?) einbinden, in denen die Beträge unter den folgenden Spalten stehen:
Datum - Name - Betrag - Gruppe - Kommentar
Die einzelnen Einnahmen und Ausgaben möchte ich (auch wieder bearbeitbar) in einer Datenbank stehen haben und die Werte über eine weiteres Fenster hinzufügen, editieren und entfernen können
Auch hier finde ich wiederum keine Lösung für mein konkretes Problem.

Ich hoffe Ihr könnt mir helfen, denn ich weiß einfach nicht weiter und ob Ihr es mir glaubt oder nicht, ich frage äußerst ungern nach, denn ich möchte am Liebsten alles selber schaffen. Hier komme ich nur nicht weiter enttäuscht .

1000 Dank im Vorraus und Grüße

DerMax

verwendetes Datenbanksystem: <Microsoft SQL Server Express>
29.03.2020 16:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 267
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

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

Hallo DerMax,

die Frage ist, was genau du erreichen möchtest.
In der Regel (Ausnahmen wären z.B. Datenbank Administrationstools wie z.B. SQL Server Management Studio) verbindet man eine Client Applikation niemals direkt mit der Datenbank, sondern setzt einen Abstraktionslayer (idr eine WebAPI) dazwischen.
Für die WebApi gibt es gängige Authentifizierungsmethoden, die dir dann diese Arbeit abnehmen.

Edit als Hintergrundinfo:
Das ganze macht man aus Sicherheitsgründen:
  • damit niemand die direkten Datenbankzugangsdaten kennt/kennen muss
  • damit man genau kontrollieren kann, was auf der Datenbank passiert
  • damit die Datenbank nicht öffentlich erreichbar sein muss
  • damit man die etablierten Sicherheitsmechanismen, die auf dem http Protokoll aufbauen nutzen kann

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Papst am 29.03.2020 16:42.

29.03.2020 16:37 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
DerMax DerMax ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.03.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Dortmund

Themenstarter Thema begonnen von DerMax

DerMax ist offline

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

Hallo Papst,

wow, schnelle Antwort großes Grinsen

1. Fehler von mir:
ich nutze das Microsoft SQL Server Management Studio und möchte eben aus meiner Anwendung auf die 3 Datenbanken zugreifen (User - Einnahmen - Ausgaben).
Diese möchte ich auch wiederum aus der Anwendung erweitern können.

Meine Idee:

Fenster 1: Login (nicht direkt in der Datenbank sondern im Haushaltsbuch. Das Haushaltsbuch soll sich dann die Datenbank des angemeldeten Nutzers holen)
mehrere Nutzer sollen sich anmelden können und das Programm soll mit Ihrer eigenen Datenbank starten können
(ich als Admin, meine Eltern und meine Schwester als User)

Fenster 2: Haushaltsbuch
DataGrid Einnahmen und DataGrid Ausgaben werden angezeigt jedes Grid hat ein Button
Einnahme hinzufügen/bearbeiten - Ausgabe hinzufügen/bearbeiten

Fenster 3: Neue Einnahme
Hier möchte ich eine Einnahme hinzufügen/bearbeiten können

Fenster 4: Neue Ausgabe
Hier möchte ich eine Ausgabe hinzufügen/bearbeiten können

Fenster 5: Nutzer
Hier möchte ich User hinzufügen/bearbeiten/entfernen können

Quasi dachte ich daran, aus jedem Fenster die Datenbanken anzusprechen und nutzen zu können...

Grüße
DerMax

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von DerMax am 29.03.2020 17:03.

29.03.2020 16:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 267
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

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

Hi,

schau nochmal, was ich geschrieben habe :)

Zitat von Papst:
In der Regel [...] verbindet man eine Client Applikation niemals direkt mit der Datenbank, sondern setzt einen Abstraktionslayer (idr eine WebAPI) dazwischen.

und nur der Vollständigkeit halber ist eine WebAPI nicht der Weisheit letzter Schluss, es gibt hierfür auch andere Technologien, wie z.B. gRPC
29.03.2020 16:55 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


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


Abt ist offline

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

Zitat von DerMax:
ich nutze das Microsoft SQL Server Management Studio und möchte eben aus meiner Anwendung auf die 3 Datenbanken zugreifen (User - Einnahmen - Ausgaben).

Du meinst 3 Tabellen, oder?. Tabellen und Datenbanken sind zwei verschiedene paar Stifel.

Zitat von DerMax:
Diese möchte ich auch wiederum aus der Anwendung erweitern können.

Du willst Daten hinzufügen oder das Schema erweitern?
Unklar ausgedrückt.

Zitat von DerMax:
Quasi dachte ich daran, aus jedem Fenster die Datenbanken anzusprechen und nutzen zu

UI und Datenhaltung haben nichts miteinander zutun.
Siehe auch  [Artikel] Drei-Schichten-Architektur

Du solltest nicht direkt aus der UI auf die Datenbank zugreifen.
Ist in 99% der Fälle ein klassischer Software Design Fehler.

Papst hat Dir aber schon das absolut richtige gesagt: abstrahier den Datenzugriff über einen Service.
Du hast keine Chance ohne Service zB ein ordentliches Rechte-Management zu implementieren.

Und ob die Daten dann von direkt von einem Datenbank-Provider oder von einem Service kommen, das muss Deiner UI völlig egal sein (siehe Schichten Artikel).
29.03.2020 19:41 Beiträge des Benutzers | zu Buddylist hinzufügen
DerMax DerMax ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.03.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Dortmund

Themenstarter Thema begonnen von DerMax

DerMax ist offline

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

Hallo Abt,

- Richtig, ich meinte Tabellen. Bin schon selber verwirrt verwundert

- ich will lediglich Daten (User und Passwörter für User bzw. Positionen im Buch) hinzufügen, das Schema muss nicht mit weiteren Spalten bzw. Tabellen erweitert werden

- ich werde mich dann mal die Tage schlau lesen. Vielen Dank für den Artikel.

Hatte es generell so versucht:

Benutzer anlegen (konnte neue User mit Passwort in der DB speichern, das hat also geklappt):

C#-Code:
private void btnSend_Click(object sender, RoutedEventArgs e)
        {
            string name = txtName.Text;
            string password = pwbPassword.Password;
            if (pwbPassword.Password.Length == 0)
            {
                errormessage.Text = "Bitte Passwort eingeben";
                pwbPassword.Focus();
            }
            else if (pwbPasswordConfirm.Password.Length == 0)
            {
                errormessage.Text = "Bitte Passwort bestätigen.";
                pwbPasswordConfirm.Focus();
            }
            else if (pwbPassword.Password != pwbPasswordConfirm.Password)
            {
                errormessage.Text = "Passwort stimmt nicht überein.";
                pwbPasswordConfirm.Focus();
            }
            else
            {
                errormessage.Text = "";
                SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=LoginTest;Integrated Security=True");
                con.Open();
                SqlCommand cmd = new SqlCommand("Insert into userLogin (username,password) values('" + name + "','" + password + "')", con);
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                con.Close();
                errormessage.Text = "Benutzer erfolgreich angelegt.";
                Reset();
            }
        }


Einloggen hat leider nicht funktioniert, gab beim Adapter ne Exception...:
private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            if (txtUser.Text.Length == 0)
            {
                errormessage.Text = "Benutzername eingeben!";
                txtUser.Focus();
            }
            else
            {
                string username = txtUser.Text;
                string password = pwbPassword.Password;
                SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=LoginTest;Integrated Security=True");
                con.Open();
                SqlCommand cmd = new SqlCommand("Select * from loginUser where username = '" + username + "' and password = '" + password + "'", con);
                cmd.CommandType = CommandType.Text;
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = cmd;
                DataSet dataSet = new DataSet();
                adapter.Fill(dataSet);
                if (dataSet.Tables[0].Rows.Count > 0)
                {
                    string user = dataSet.Tables[0].Rows[0]["username"].ToString();
                    programm.Begrüßung.Text = user;
                    programm.Show();
                    Close();
                }
                else
                {
                    errormessage.Text = "Benutzername und/oder Passwort falsch.";
                }
                con.Close();
            }
        }

Ich werde mich dann die nächsten Tage mal schlau lesen wegen der WebAPI.

Danke euch beiden erstmal für die Hilfe
Gruß
DerMax
29.03.2020 20:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


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


Abt ist offline

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

Ja, den Code kannst so eigentlich wegwerfen :-)
Aber das is nicht schlimm: das ist manchmal so.
Jeder von uns wirft Code weg.

Dein Code zeigt riesige Lücken:
- Man speichert kein Passwort im Klartext (ist sogar gesetzlich verboten, haftest Du)
- Man entwickelt wenn möglich keine Authentifizierung selbst (dafür gibts Frameworks!)
- Dein Code ist voll von SQL Injection  [Artikelserie] SQL: Parameter von Befehlen

Ganz ehrlich: les Dich erstmal in die Themen ein, mach Tutorials.
Das Risiko, dass Du Dich derzeit etwas aufgrund des Kenntnisstands übernimmst, ist relativ hoch.
Daher back erstmal kleine Brötchen, bevor Du an zu vielen Ecken gleichzeitig irgendwas halb lernst ;-)

Des weiteren sind DataTables ganz arg alte Kiste ;-)
29.03.2020 20:14 Beiträge des Benutzers | zu Buddylist hinzufügen
DerMax DerMax ist männlich
myCSharp.de-Mitglied

Dabei seit: 29.03.2020
Beiträge: 7
Entwicklungsumgebung: Visual Studio 2019
Herkunft: Dortmund

Themenstarter Thema begonnen von DerMax

DerMax ist offline

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

Hallo Abt,

ok, ich mach mich dann mal schlau(er). Hast du vielleicht ein oder zwei gute Tutorials? Die, die ich kenne und gefunden habe sind auch schon ganz alte Kisten... smile

Irgendwie hab ich den Login Vorgang hinbekommen, nur wird lediglich der erste User in der Tabelle genutzt, beim Zweiten funktioniert das nicht... also Funktionsstand gleich Null verwundert

Gruß
DerMax
01.04.2020 09:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Der letzte Beitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 28.05.2020 20:50