0

C#のSqlCommandのパラメータ名に先頭文字(@または)がある場合とない場合の違いは何ですか?:

command.CommandText = "SELECT * FROM myTable WHERE name = @myName";
command.Parameters.Add(new SqlParameter("@myName", "bob"));

でもこれでOK

command.Parameters.Add(new SqlParameter("myName", "bob"));

これでも動作します

command.Parameters.Add("myName", "bob");

2 番目のものはテストしていませんが、すべてインターネットで見ることができます。

私は Oracle に対して試してみましたが、両方とも動作しまし:た。

どちらが良いですか、それとも同じですか?

4

2 に答える 2

3

@指定しない場合は自動的に追加されます。ここでソースコードを確認してください:

internal string ParameterNameFixed {
    get {
        string parameterName = ParameterName;
        if ((0 < parameterName.Length) && ('@' != parameterName[0])) {
            parameterName = "@" + parameterName;
        }
        Debug.Assert(parameterName.Length <= TdsEnums.MAX_PARAMETER_NAME_LENGTH, "parameter name too long");
        return parameterName;
    }
}

これは、コマンドに対して SQL クエリ文字列が生成されるときに使用されるプロパティです。

于 2014-04-27T06:16:51.787 に答える
0

パラメータの@前は、それがパラメータであり、それ以外のものではないことをSQLインタープリターに伝えます。

それを省略しても、名とパラメーター名があいまいになる可能性があるため、機能する可能性があります。

あなたの場合:

SELECT * FROM myTable WHERE name = @myName

という名前の列がある場合でも正しく機能しますが、myNameこれは次のとおりです。

SELECT * FROM myTable WHERE name = myName

columnまたは parameterのどちらを参照しているかにかかわら、SQL インタープリターが混乱するため、機能しません。myNamemyName

于 2014-04-27T06:12:25.020 に答える