Laden...

MySQL: Prüfen ob Eintrag vorhanden ist.

Erstellt von cyanide vor 14 Jahren Letzter Beitrag vor 14 Jahren 13.392 Views
C
cyanide Themenstarter:in
88 Beiträge seit 2008
vor 14 Jahren
MySQL: Prüfen ob Eintrag vorhanden ist.

verwendetes Datenbanksystem: <MySQL>

Moin,

wie kann ich prüfen ob ein Wert vorhanden ist?

Habe es unfertig so:

            string connectionString = "SERVER=localhost;" +
                                      "DATABASE=mydb;" + 
                                      "UID=sil;" + 
                                      "PASSWORD=t321;";

            MySqlConnection sqlConnection = new MySqlConnection(connectionString);
            MySqlCommand command = sqlConnection.CreateCommand();

            command.CommandText = String.Format("SELECT COUNT(*) FROM `players` WHERE `players`.`name` = '{0}';", "silent");

            MySqlDataReader reader;

            sqlConnection.Open();

            reader = command.ExecuteReader();

            // Wie prüfe ich den Reader nun, ob "silent"-Eintrag vorhanden ist? Als bool hätte ich es gerne

Habt ihr da ne Idee?

S
69 Beiträge seit 2007
vor 14 Jahren

Hi,

der Reader hatn Propertie names HasRows 😉

MfG

344 Beiträge seit 2006
vor 14 Jahren

Hallo

Benutze zum auslesen eines einzelnen Wertes ExecuteScalar(). Mit der Methaode kannst du prüfen ob ein Wert vorhanden ist.

Gruss Lothi

D
496 Beiträge seit 2005
vor 14 Jahren

oder ohne reader und stattdessen mit mysqlcommand.executescalar() der rückgabewert ist int und liefert die anzahl rows

*edit, da war ich zu langsam

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

344 Beiträge seit 2006
vor 14 Jahren

@demondriver235

mysqlcommand.executescalar() der rückgabewert ist int und liefert die anzahl rows

Nicht ganz.
Der Rückgabe Wert ist object.
Die Methode gibt den ersten Wert der ersten Spalte zurück und wenn nichts da ist, gibt sie NULL zurück.

Gruss Lothi

D
496 Beiträge seit 2005
vor 14 Jahren

..stimmt hab ich glaub ich mit executenonquery() verwechselt

"Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life."

C
cyanide Themenstarter:in
88 Beiträge seit 2008
vor 14 Jahren

Moin Leute, besten Dank für eure Antworten.

Leider klappt es noch nicht so wie es soll....

Habe es gerade so:

        public bool check()
        {
            string connectionString = "SERVER=85.255.24.46;" +
                          "DATABASE=sss;" + 
                          "UID=puk;" + 
                          "PASSWORD=jo123;";

            MySqlConnection sqlConnection = new MySqlConnection(connectionString);
            MySqlCommand command = sqlConnection.CreateCommand();

            command.CommandText = String.Format("SELECT COUNT(*) FROM `players` WHERE `players`.`name` = '{0}';", "sggggilent");

            sqlConnection.Open();

            return (command.ExecuteScalar() != null);
        }

Die Methode gibt True zurück, obwohl der name "sggggilent" definitiv nicht existiert... Könnt ihr mir noch sagen was falsch ist?

344 Beiträge seit 2006
vor 14 Jahren

Hallo

Ja, das glaub ich dir.
Du benutzt COUNT(*) diese Funktion gibt 0 zurück, also steht in der ersten Zeile in der ersten Spalte 0 und nicht NULL.

Gruss Lothi

F
10.010 Beiträge seit 2004
vor 14 Jahren

@cyanide:
Es ist z.b. Falsch, das Du ohne die Grundlagen anzuschauen einfach drauf los
hackst, und dann erwartest, das wir hier deine schlechten versuche geraderücken.

[Hinweis] Wie poste ich richtig? Punkt 4C

[Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen
[Artikelserie] Parameter von SQL Befehlen

Und wie dir Lothi ja schon gezeigt hast, ausserdem noch fehlendes SQL.

C
cyanide Themenstarter:in
88 Beiträge seit 2008
vor 14 Jahren

Lothi: Besten Dank! 😃

FZelle:

Ich brauche lediglich diese eine Methode die SQL-Befehle beinhaltet. Muss ich deswegen jetzt die komplette SQL-Syntax lernen?
Weiter habe ich nicht gefragt wie ich das ganze ressourcenschonend hinbekomme.
Ich wollte lediglich wissen, was ich hinter "return" angeben muss um zu wissen, ob der User in der Tabelle existiert oder nicht.

Wozu ist dieses Forum? Ich habe nicht nach nem kompletten Code gefragt sondern nur wie ich obiges rausfinden kann.

Wenn es nach Dir ginge, wäre dieses Forum völlig sinnlos. Sorry, ich finde es einfach blödsinnig.

F
10.010 Beiträge seit 2004
vor 14 Jahren

Das Forum ist nicht dazu da deine Arbeit zu machen, sondern lediglich um Dir
bei Verständnisproblemen zu helfen.
Du willst aber nicht verstehen, sondern deine Arbeit gemacht haben.
Deswegen der erste Link.

Trotzdem habe ich dir zusätzlich noch die beiden entscheidenden Links zur
Arbeit mit ADO.NET geschrieben damit Du wenigstens weisst, das man
eine Sql Verbindung Schliessen muss, und auf keinen Fall irgendwelche Parameter
in Strings friemelt.

Ohne Grundlagen lernen auf deiner Seite wird dein Ansinnen immer das selbe bleiben,
nämlich das andere deine Arbeit machen.

C
cyanide Themenstarter:in
88 Beiträge seit 2008
vor 14 Jahren

Moin FZelle,

ich verstehe es eben nicht so ganz, mein Code besteht wirklich aus mehreren 10.000en Lines und dann soll ich mit dem Fitzel Code meine Arbeit gemacht bekommen wollen?
Ich habe vorher Google ohne Ende benutzt und bin nicht auf die Lösung gekommen.

Gefunden habe ich z.B unter anderem Codes die als Ergebnis:

Int32 NumRows = (Int32)cmd.ExecuteScalar(); 

heben.

Diese Zeile lässt sich bei mir nichteinmal kompilieren: "Die angegebene Umwandlung ist ungültig".

*Wie hätte ich deiner Meinung nach hier fragen können, wie ich etwas bestimmtes erreichen kann, wenn ich es sonst anderweitig nicht finde? Oder muss man sein Projekt dann abbrechen und damit leben?*

Außerdem finde ich lieber was im Internet, als 'nen Beitrag verfassen zu müssen.

Weißt du, mir ist klar, dass man die Verbindung schließt und dass man auch keine Strings durch Strings als Parameter formatiert, dies wäre ja total unsinnig, da ich das ganze ja dann nicht formatieren bräuchte, sondern das ganze direkt in den zu formatierenden String packen könnte.

Es war lediglich eine Testmethode und nur die letzte Zeile, also das was ich returnen muss, hat mich interessiert, nichts anderes.

Wenn ich mich deiner Meinung anscchließe, dann wird sogut wie jedem hier im Forum irgendwie "Arbeit" abgenommen.
Selbst wenn es so wäre, würde man sich damit einen Zacken aus der Krone brechen?
Wenn ich gefragt hätte, ob mir hier jemand mein Projekt schreibt, ok, aber das hier ist etwas übertrieben.

Dies war mein letzter Post in diesem Thread, nicht wegen Dir, sondern wegen dem OT meinerseits.

A
29 Beiträge seit 2008
vor 14 Jahren

ich muss mich da teilweise an cyanide anschließen.
ein forum ist eine plattform für alle die um hilfe ansuchen.
wenn sich jemand zu gut ist für manche beiträge zu antworten, dann ist er ja nich dazu gezwungen.
ich selbst habe auch schon mal die antwort "ich sags dir nicht, denn wenn du es selbst herausfindest hilft es dir viel mehr" erhalten, die absolut in kein forum gehört!

was ich aber sehr gut finde (auch als aussenstehender leser) ist, wenn zB FZelle links postet mit denen man sich weiterbilden kann.

lg andreas

F
10.010 Beiträge seit 2004
vor 14 Jahren

@andreasp333:
Naja, wenn Du so eine Antwort bekommen hast, wird es daran gelegen haben das der
Antwortende deine Fragestellung so interpretiert hat, das du dir vorher die
Grundlagen nicht angesehen hast.
[Hinweis] Wie poste ich richtig? ist eine gute Einführung dazu, was wir hier in diesem
Forum vom Fragenden erwarten bevor er eine Frage postet.

@cyanide:

Diese Zeile lässt sich bei mir nichteinmal kompilieren: "Die angegebene Umwandlung ist ungültig". [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

Und

Es war lediglich eine Testmethode und nur die letzte Zeile, also das was ich returnen muss, hat mich interessiert, nichts anderes.

Passt nicht zu

Weißt du, mir ist klar, dass man die Verbindung schließt und dass man auch keine Strings durch Strings als Parameter formatiert, dies wäre ja total unsinnig, da ich das ganze ja dann nicht formatieren bräuchte, sondern das ganze direkt in den zu formatierenden String packen könnte.

Es läuft also wieder darauf hinaus, das du dich nicht an die regeln des Forums halten willst.
[Hinweis] Wie poste ich richtig?

C
cyanide Themenstarter:in
88 Beiträge seit 2008
vor 14 Jahren

Aha, und in welchem Zusammenhang stehen sich Quote 2 und 3?

Was hat z.B mein String den ich formatieren möchte, überhaupt mit dem Thema hier zu tun?

Vielleicht weißt du ja die Antwort darauf auch, danke schonmal.