2013-02-28 14 views
6

Was macht das @-Zeichen, wenn es vor Parameter-SQL-Abfrage eingefügt wird?Was bewirkt das @ vor einem Parameternamen?

zum Beispiel:

using (SqlCommand cmd = new SqlCommand("INSERT INTO [User] values (@Forename, @Surname, @Username, @Password)", con)) 
{ 
    cmd.Parameters.AddWithValue("@Forename", txtForename.Text); 
    cmd.Parameters.AddWithValue("@Surname", txtSurname.Text); 
    cmd.Parameters.AddWithValue("@UserName", txtUsername.Text); 
    cmd.Parameters.AddWithValue("@Password", txtPassword.Text); 

    cmd.ExecuteNonQuery(); 
} 
+0

So viele Antworten lol! –

+0

Hinweis: Das @ wird nicht für den Parameternamen benötigt, nur die SQL-Anweisung. – eschneider

Antwort

5

Im Gegensatz zu dem, was andere Leute hier gesagt haben, macht der @ Charakter nichts per se. Sie können entweder den Parameter mit

.AddWithValue("ParaName",value); 

oder

.AddWithValue("@ParaName",value); 

hinzufügen Und beide werden zu einem @ParamName auf der DB-Seite namens Paramater angepasst werden. Also ist es nicht erforderlich.

Having saided, es ist eine ziemlich übliche Praxis, immer die @ vor dem Parameter zu verwenden, weil genau so wird es in der Datenbankseite benannt werden.

+0

ja ich hatte das gleiche gedacht, als ich programmiert habe, aber ich wurde von jemandem gesagt, dass das Verlassen des Parameters ohne das @ bedeuten würde, dass mein Code anfälliger für eine SQL-Injektion ist, ist das wahr oder ... – bandaa

+0

@bandaa gar nicht, zumindest nicht in diesem Zusammenhang! Sie verwenden Parameter und sind nicht anfällig für SQL-Injection-Angriffe. – Icarus

+0

@bandaa: Sql Injection Threat ist * 'meistens' * über nicht parametrisierte Abfragen. Bsp: '" wähle col1 aus table1, wobei x = '"+ txtName.Text +"' "'. Hier kann "txtName.Text" alles sein und es könnte die Abfrage unterbrechen, wenn es auch "" darin enthält ... – Kaf

1

nichts Magisches - es ist nur die Syntax SQL verwendet Parameter und lokale Variablen zu bezeichnen. Es ist nicht das gleiche wie die C# @ Zeichen, das den Compiler nicht zu verarbeiten Escape-Sequenzen in Stringliterale sagt:

string stringWithSlashes = @"Use '\n' to add a new line"; 

oder dass können Sie reservierte Wörter als Variablennamen verwenden:

string @class = "Geometry"; 
7

Das gerade ist was bedeutet, dass es ist ein Parametername in der Abfrage - im Gegensatz zu versuchen, ein Feld aus der Spalte zu verwenden.

Es ist nicht klar, ob es unbedingt notwendig ist, wenn das SqlParameter Objekt konstruieren, aber ich denke, es ist sinnvoll in Einklang :)

zu sein macht
0

@ sagt, es ist ein Ein-/Ausgabeparameter, dessen Wert von außerhalb des Skript übergeben werden .

+2

Könnte auch ein Ausgabeparameter sein :) –

0

@ zeichen bedeutet auf SqlParameterCollectionder Name des Parameters. Feld aus der Spalte verwenden

Parameters 

parameterName 
Type: System.String 

The name of the parameter. 
0

Das @ ist in diesem Fall ein SQL Server-Konstrukt. Parameter für SQL Server-Abfragen werden mit dem @ -Symbol angegeben, da T-SQL (SQL Server-Programmiersprache) das @ -Symbol für Variablen verwendet.

Verwandte Themen