2013-02-28 6 views
6

パラメータSQLクエリの前に挿入した場合、@の記号は何をしますか?例えばパラメータ名の前に@は何をしていますか?

:魔法

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

多くの回答があります。 –

+0

注:パラメータ名には@は必要ではなく、SQL文だけが必要です。 – eschneider

答えて

5

他の人がここで言ったのとは対照的に、@の文字はそれ自体は何もしません。あなたは

.AddWithValue("ParaName",value); 

または

.AddWithValue("@ParaName",value); 

でパラメータを追加するか、そして、彼らの両方がDB側の@ParamNameという名前のparamaterにマッチします。したがって必須ではありません。

これは言い換えれば、パラメータの前に常に@を使用するのはかなり標準的な方法です。これは、それがデータベース側でどのように命名されるのかということであるからです。

+0

私はプログラミング時に同じ考えをしていましたが、@を付けずにパラメータを残すと誰かから言われましたが、私のコードはSQLインジェクションに対して脆弱です。または... – bandaa

+0

@bandaa全くこの文脈ではない!あなたはパラメータを使用しており、SQLインジェクション攻撃を受けにくいです。 – Icarus

+0

@bandaa:Sql Injectionの脅威は、パラメータ化されていないクエリに関する* 'ほとんど' *です。 Ex: '' x = '"+ txtName.Text +"' "のtable1からcol1を選択します。ここで 'txtName.Text'は何でもかまいません。クエリーに' ''が含まれていると、クエリーを中断する可能性があります... – Kaf

1

何もない - それはちょうど構文のSQLパラメータとローカル変数を示すために使用します。

​​

またはそれはあなたが変数名として予約語を使用することができます::

string @class = "Geometry"; 
7

だけだこれは、文字列リテラルにエスケープシーケンスを処理しないようにコンパイラに指示しますC#@文字と同じではありませんそれはであることを示すもので、クエリのパラメータ名です。これは、列のフィールドを使用しようとするのとは異なります。

それはSqlParameterオブジェクトを構築するときに、それが厳密に必要なのかどうかは明らかではないのですが、私はそれが矛盾しないように理にかなっていると思います:)

0

@は、値がスクリプトの外から渡すことができる入力/出力パラメータであると言います。

+2

出力パラメータでもあります:) –

0

@符号の意味SqlParameterCollectionの名前。列のフィールドを使用します。

Parameters 

parameterName 
Type: System.String 

The name of the parameter. 
0

この場合、@はSQL Serverの構成です。 T-SQL(SQL Serverプログラミング言語)は変数に@記号を使用するため、SQL Serverクエリのパラメータは@記号で指定します。

関連する問題