2013-02-28 11 views
6

Che cosa fa il segno @ quando viene inserito davanti alla query SQL dei parametri?Cosa fa @ davanti al nome di un parametro?

ad esempio:

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

Così tante risposte lol! –

+0

Nota: @ non è necessario per il nome del parametro, solo l'istruzione sql. – eschneider

risposta

5

Contrariamente a quanto detto da altre persone, il carattere @ non fa nulla di per sé. È possibile aggiungere il parametro con

.AddWithValue("ParaName",value); 

o

.AddWithValue("@ParaName",value); 

Ed entrambi saranno abbinate ad un paramater chiamato @ParamName sul lato DB. Quindi NON è richiesto.

Detto questo, è una pratica piuttosto normale utilizzare sempre lo @ davanti al parametro perché è esattamente come verrà chiamato nel lato del database.

+0

sì, avevo pensato lo stesso quando stavo programmando, ma qualcuno mi ha detto che lasciare il parametro senza @ significherebbe che il mio codice è più vulnerabile a un'iniezione SQL, è vero? o ... – bandaa

+0

@bandaa per niente, almeno non in questo contesto! Si utilizzano i parametri e non sono soggetti agli attacchi di SQL injection. – Icarus

+0

@bandaa: Sql Injection threat è * 'principalmente * * su query non parametrizzate. Es: '" seleziona col1 da table1 dove x = '"+ txtName.Text +"' "'. Qui, 'txtName.Text' può essere qualsiasi cosa e potrebbe interrompere la query se ha' 'anche in esso ... – Kaf

1

nulla di magico - è solo la sintassi SQL utilizza per indicare i parametri e le variabili locali. Non è lo stesso del personaggio C# @ che dice al compilatore di non elaborare fuga-sequenze in stringhe letterali:

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

o che consente di utilizzare le parole riservate come nomi di variabili:

string @class = "Geometry"; 
7

Questo è solo quello che indica che è è un nome parametro nella query - al contrario di provare a utilizzare un campo dalla colonna.

Non è chiaro se è strettamente necessario quando si costruisce l'oggetto SqlParameter, ma penso che ha senso di essere coerenti :)

0

@ dice che è un parametro di ingresso/uscita il cui valore può essere passato al di fuori dello script .

+2

Potrebbe essere un parametro di output :) –

0

@ segno significa SqlParameterCollectionil nome del parametro. Usando il campo dalla colonna.

Parameters 

parameterName 
Type: System.String 

The name of the parameter. 
0

La @ in questo caso è un costrutto di SQL Server. I parametri alle query di SQL Server sono specificati con il simbolo @ poiché T-SQL (linguaggio di programmazione di SQL Server) utilizza il simbolo @ per le variabili.

Problemi correlati