Benutzer mit den meisten Antworten
das Gegenstück von reader.HasRows in WPF

Frage
-
Hallo zusammen,
ich habe eine Application in C Sharp mit Visual Studio Windows Forms codiert.
Nun möchte ich das ganze doch in WPF umsetzten und codiere gerade alles um.Soweit klappt es aber ich hänge im Moment an folgendem.
In meinem Code mache ich eine Abfrage an die DB
con.Open(); cmd.CommandText = "SELECT seriennummer FROM artikel where seriennummer = '" + txtBoxErfassenSN1.Text + ; reader = cmd.ExecuteReader(); if (reader.HasRows) {...Anzeige Artikel Bereits Vorhanden! } else { ... Artikel speichern... } con.Close();
Bein WindowsForms klappt das.
Sowas in WPF gibts aber anscheinden nicht. Ich suche die Möglichkeit um nach der Abfrage eine IF Schleife zu bilden,
die Quasi folgendes macht."Wenn das Query als Ergenis leer ist dann mach Code1 ansonsten Code 2"
In der WPF setzte ich jetzt SQLite ein und habe folgenden Code: Das Argument in dem IF wird zwar compiliert, aber geht nicht.
sqlite_conn = new SQLiteConnection ("Data Source=database.db;Version=3;New=false;Compress=True;");
sqlite_conn.Open();
string Query = "SELECT seriennummer FROM artikel where seriennummer = '" + txtBoxErfassenSN1.Text + "';
SQLiteCommand createCommand = new SQLiteCommand(Query, sqlite_conn);
SQLiteDataReader reader = createCommand.ExecuteReader();
if (reader!=null)
{
MessageBox.Show(" 1. Artikel bereits vorhanden mit Seriennummer " + txtBoxErfassenSN1.Text + " ");
//reader.Close();
}
else
{ ....Code ....}Hat jemand Rat?
Gruss
Manuel Roque de Jesus
- Bearbeitet MeisterJesus Donnerstag, 23. Februar 2017 00:14
Antworten
-
Hallo Manuel,
Datenbankverbindung etc. sind eigentlich unabhängig vom UI Framework, von daher sollte alles von WinForms 1 zu 1 auch noch in WPF funktionieren.
Die Frage ist nun, welche Klassen du genau verwendest (also der Typ von reader). Die SQLiteDataReader-Klasse hat scheinbar eine HasRows-Eigenschaft, da die Klasse von DbDataReader erbt.
Dein 2. Code kann so nicht funktionieren, da ExecuteReader IMO nicht null zurück gibt.
BTW, du solltest Parameter verwenden, sonst ist SQL-Injection eine große Gefahr.
Ach übrigens, es gibt keine if-Schleife, das nennt man Abfrage.
Viele Grüße, Tom Lambert - MVP, MCC und MSP
Wozu Antworten markieren und Posts bewerten? Klicke hier
Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 2. März 2017 00:30
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 8. März 2017 15:24
Alle Antworten
-
Hallo Manuel,
Datenbankverbindung etc. sind eigentlich unabhängig vom UI Framework, von daher sollte alles von WinForms 1 zu 1 auch noch in WPF funktionieren.
Die Frage ist nun, welche Klassen du genau verwendest (also der Typ von reader). Die SQLiteDataReader-Klasse hat scheinbar eine HasRows-Eigenschaft, da die Klasse von DbDataReader erbt.
Dein 2. Code kann so nicht funktionieren, da ExecuteReader IMO nicht null zurück gibt.
BTW, du solltest Parameter verwenden, sonst ist SQL-Injection eine große Gefahr.
Ach übrigens, es gibt keine if-Schleife, das nennt man Abfrage.
Viele Grüße, Tom Lambert - MVP, MCC und MSP
Wozu Antworten markieren und Posts bewerten? Klicke hier
Nützliche Links: .NET Quellcode | C#/VB.NET Konverter | GitHub Forum Samples | Account bestätigen (Verify Your Account)
Ich: Webseite | Facebook | Twitter | Code Snippets | GitHub- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 2. März 2017 00:30
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 8. März 2017 15:24
-
Hallo Manuel,
reader.HasRows sollte auch bei einem SQLiteDataReader eigentlich true oder eben false zurückgeben, je nachdem, ob die Abfrage Ergebnisse brachte oder nicht.
Was genau funktioniert denn mit dem Code aus deiner WinForms Anwendung nicht?
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 -
Hallo Manuel,
und was genau heißt "Geht nicht"? Fehlermeldung?
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 -
Wie wäre es denn, wenn Du, als work-a-round, die Zahl der Datensätze ermittelst:
string befehlText = "SELECT COUNT(*) FROM artikel WHERE seriennummer = @TextParameter";
SQLiteCommand befehl = new SQLiteCommand(befehlText, sqlite_conn);
// Parameter um Injection zu vermeiden: befehl.Parameters.AddWithValue(new SQLiteParameter("@TextParameter", txtBoxErfassenSN1.Text)); int Anzahl = Convert.ToInt32(befehl.ExecuteScalar());
Nun kannst Du Anzahl auf 0 oder ungleich 0 prüfen.
Was ich allerdings nicht verstehe, warum HasRows bei Dir nicht funktioniert. Bei mir hat der SQLiteDataReader sehr wohl die Eigenschaft HasRows.
Gruß
Ralf
- Bearbeitet Ralf_Ellersiek Montag, 6. März 2017 14:51