2010-12-15 13 views
2

In der folgenden Abfrage, was "?" bedeuten?Was bedeutet das "?" in einer Abfrage bedeuten?

this.AdminDelCmd.CommandText = 
    "DELETE FROM Admin WHERE (admincd = ?) AND (terminalno = ?)"; 
+1

Haben Sie die Abfrage zufällig vergessen? – meagar

+0

Hallo, können Sie die Abfrage hinzufügen? – ameer

+1

Downvoting es, weil es wie eine echte Frage scheint, aber ohne die eigentliche "Abfrage" - es ist ein bisschen zu zweideutig. Entferne meinen Downvote, wenn das OP die Frage aktualisiert – InSane

Antwort

1

Je nach Inhalt der unsichtbaren Abfrage, könnte es entweder ein Teil des ternären Operators Asaph erwähnt, oder die Abkürzung für ein Nullable<type> sein.

Also, wenn es heißt:

object.hasProperty ? "true" : "false"; 

es ist der ternäre Operator;

Wenn sie sagt:

int? anInt; 

es bedeutet Nullable<int> anint den Wert und Sie können anInt = null; schreiben, die sehr praktisch ist, wenn Sie aus einer Datenbank gerade lesen und eine Spalte, die Integer-Werte akzeptiert, OR ein NULL.

+2

Dies beantwortet die Frage nicht. Die Frage bezieht sich auf eine SQL-Abfrage, nicht auf eine C# -Funktion. –

+3

Und das wüssten wir alle, wäre die Anfrage tatsächlich gepostet worden. – Liz

1

Das bedeutet, dass der Wert von admincd UND terminalno zur Laufzeit von der Datenquelle aufgelöst wird.

Ich denke, Ihre Datenquelle einen Datatable sein würde und Ihre versuchen, Ihre Datenbank mit

DataApapter

9

Dies ist kein ternärer Operator zu aktualisieren, und ist nicht ein Objekt vom Typ Nullable.

Dies wird als parametrisierte Abfrage bezeichnet und wird verwendet, um SQL Injection zu verhindern. Dies ist der "ältere Stil" der SQL-Syntax. Dies kann verwendet werden, wenn Ihre Abfragen mit mehreren verschiedenen Datenbanken arbeiten sollen (z. B. MySQL & SQL Server). Der neue Stil, der auch für SQL Server verwendet wird (wie unten auf hingewiesen wurde), verwendet ein '@' vor dem Parameternamen. MySQL verwendet auch '@' für serverseitige Benutzervariablendeklarationen, die zu einiger Verwirrung führen können.

Späterer Code füllt die Fragezeichen aus. Wenn Sie die nächsten paar Zeilen schreiben könnten, würde uns das mehr helfen.

Hier einige Links sind Dinge zu erklären gründlicher (die zweite für asp ist aber gilt):
http://msdn.microsoft.com/en-us/library/cc296201(v=sql.90).aspx
http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

+2

"nicht die Standard-C# -Syntax" - SQL-Syntax hat nichts mit C# zu tun. Die SQL Server-Syntax verwendet ein @ -Präfix für benannte Parameter, andere Datenbanken können jedoch andere Konventionen haben oder benannte Parameter überhaupt nicht unterstützen. – Joe

+0

Ah, danke für die Klärung. Fast jede Seite, die ich angeschaut habe, hatte die '@' Stil-Syntax, also dachte ich, dass es Standard für C# war. Ich habe MySQL nur gründlich verwendet. – Brandon

0

Das "?" mark ist ein Platzhalter für einen Parameter, der später im Code angegeben wird. Auf diese Weise kann Ihr SQL-Befehl am Anfang als "vorbereitete Anweisung" vorkompiliert (geparst) werden und später bei der Ausführung schneller sein, wenn Parameter verfügbar sind.

3

Dies sind positional parameters in Ihrer SQL-Abfrage (im Gegensatz zu benannten Parametern).

Ihr Befehl sollte einen Parameter für jeden Positionsparameter (?) In derselben Reihenfolge haben wie die Positionsparameter im Befehlstext.

Sie verwenden in der Regel Positionsparameter

  • , wenn Ihr Provider nicht benannte Parameter unterstützen. Zum Beispiel unterstützen viele OleDb-Anbieter keine benannten Parameter.

  • oder wenn Sie Interoperabilität mit mehreren Anbietern möchten. Verschiedene Anbieter können unterschiedliche Konventionen für benannte Parameter haben (z. B. SQL Server verwendet ein @ -Präfix für den Parameternamen, aber Oracle nicht). Wenn Sie daher die gleiche Abfragesyntax für mehrere Anbieter verwenden möchten, verwenden Sie häufig besser Positionsparameter als benannte Parameter.

Verwandte Themen