1

次のようなコードを使用するときに const 文字列を使用する必要があるかどうか疑問に思っています。

    public DataTable GetSomeData(int id)
    {
        var con = new SqlConnection(ConnString);
        const string sql = "SELECT * FROM [data] WHERE [id]=@id";
        var cmd = new SqlCommand(sql, con);
        cmd.Parameters.AddWithValue("@id", id);

        var dt = new DataTable();
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        dt.Load(dr);
        con.Close();

        return dt;
    }

ReSharper は、この方法で解決することを提案しましたが、実際には一定ではないため、そうすべきではないと言われました。パラメータを追加すると変化します。コードを実行しているサーバー上で一定であり、データベースに到達したときにのみ変更されるため、この方法は適切だと思いました。

それで、これを行う最善の方法は何ですか?

4

1 に答える 1

7

パラメーターのプレースホルダーを含む文字列は定数である必要があり、それを定数として宣言するのは正しいことです。可変なのはコマンド オブジェクトですが、クエリ文字列は定数であり不変です。

于 2012-05-24T14:57:06.980 に答える