C# - prüfen ob Datensatz vorhanden, SQL Fehler
Bin ich mit diesem code, um zu überprüfen, ob ein Wert (guid1) bereits in der 'guid' Tabelle:
string selectString = "SELECT guid" + "FROM trafficScotland" + "WHERE guid = " + guid1;
SqlCommand myCommand = new SqlCommand(selectString, myConnection);
String strResult = String.Empty;
strResult = (String)myCommand.ExecuteScalar();
if (strResult.Length == 0)
Aber am
strResult = (String)myCommand.ExecuteScalar();
Zeile, bekomme ich die sqlException Fehler
Incorrent syntax in der Nähe 'guid'
Bitte zeigen Sie mir, was ist hier falsch?
in ur, codez, injizieren von SQL-Anweisungen
InformationsquelleAutor Dan Sewell | 2011-07-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
selectString = "SELECT guid " + "FROM trafficScotland" + " WHERE guid = '" + guid1 +"'"
;Beachten Sie die Leerzeichen nach guid
-1 Wieder, Sie sollten nie jemals ein parameter übergeben werden, um eine Abfrage auf diese Weise. Es gibt einfach keinen guten Grund dafür
Das ist anfällig für SQL-injection. Ich würde lieber eine Lösung mit Parametern, wie vorgeschlagen, andere Antworten.
InformationsquelleAutor hungryMind
Ist:
Macht es keinen Sinn zu brechen, die in separaten strings sowieso, aber Sie sind fehlende Leerzeichen zwischen den Worten 🙂
^^ Hier ist eine verbesserte version. Mehrere Punkte für die Kritik, wenn ich darf:
DBNull.Value
im Falle, gibt es nichtstring
aber der Umgang mitGuid
s. Seltsam.Genau das richtige, plus möchten Sie vielleicht zu prüfen, mit parametrisierten Abfragen, um den Schutz vor sql-injection.
Die Verkettung von string-literalen mit
+
nicht verlangsamen die routine. Der C# - compiler die Verkettung zur compile-Zeit. So können Sie+
aufteilen einer langen string-literal in mehrere Zeilen code in den Quellcode.Danke für die Korrektur. Ich denke, es ist Zeit zu gehen, schnappen Sie sich einen Kaffee. :-0
dein Beispiel hat mir geholfen, immensley zu lernen, C#, best practice, wie zu identifizieren, wenn ein SQL-Eintrag nicht vorhanden ist, so kann code handle der situation angemessen. Danke!!!
InformationsquelleAutor Kieren Johnstone
Etwas wie dies:
InformationsquelleAutor Yuck
Jeder gesagt, was das problem ist. Ja, die Abfrage ist nicht korrekt. Aber was ist mit deiner Zukunft Abfragen? Wie willst du sehen, ob Sie Recht haben?
Ich empfehle, dass Sie verwenden SQL Server Profiler. Profiler sitzt zwischen der Anwendung und der Datenbank-engine, und greift jeden Befehl und Abfrage übergeben um Datenbank-engine. So können Sie sehen, was an SQL Server übergeben, nehmen Sie es, und versuchen Sie, führen Sie in SQL Server Management Studio zu Debuggen.
InformationsquelleAutor Saeed Neamati
Idealerweise würde man die Parameter verwenden, um den Schutz vor SQL-injection. Sie behandelt auch Dinge wie zitieren Werte müssen in Anführungszeichen eingeschlossen werden (wie GUIDs):
InformationsquelleAutor Sean Carpenter
Zuerst müssen Sie fix Ihr Abstand, den Sie verketten, Teil einer Abfrage zusammen und Ihnen fehlt der Raum zwischen zentrale sql server-Schlüsselwort.
Zweitens sollten Sie benannte Parameter zu verwenden. Dies wird helfen, die Vermeidung von sql-injection und dadurch verhindern, dass Sie denken müssen, wenn Sie brauchen, Apostroph oder nicht, um Ihre sql-Variablen.
InformationsquelleAutor Pierre-Alain Vigeant
Geschrieben, weil Sie vergessen haben, einige Bereiche, die Sie ausführen der folgenden Abfrage
Den richtigen Abstand, ist die erste Sache zu lösen.
InformationsquelleAutor Gregory A Beamer
versuchen Sie dies:
Thx für Eure -1! Ich glaube, diese Lösung ist nicht perfekt, aber ist nicht falsch! Sie können nicht wissen, ob er die Verwendung einer Guid.Analysieren, prüfen, für sql-injection!
Meine persönliche Politik zu machen, ist eine option, die ist ein Sicherheitsrisiko und schlecht/faul Programmierung praktizieren, haben eine niedrigere Bewertung. Nur weil es die einfachste, faulste route, die arbeitet, bedeutet nicht, es ist "Recht". Es ist die falsche Antwort in meinem Buch
Wollen Sie downvote nur meine Antwort? Es gibt auch andere Baum-Antworten in diesem Thema wie meins, warum nicht downvote Sie? Ich will nicht zum starten einer Flamme, sondern Ihr handeln klingt sehr seltsam für mich!
InformationsquelleAutor danyolgiax
Leerzeichen + schließen Sie die guid mit "'" wie andere erwähnt haben. Sie sollten auch speichern
GUIDs
alsUNIQUEIDENTIFIERs
(vorausgesetzt, MSSQL)InformationsquelleAutor Andrew Bullock