基本的にCommands
にはParameters
があり、パラメーターにはAdd
、AddWithValue
などのような関数があります。これまで見てきたすべてのチュートリアルで、 Add
の代わりにAddWithValue
を使用します。
.Parameters.Add("@ID", SqlDbType.Int)
対
.Parameters.AddWithValue("@ID", 1)
AddWithValue
を使用しない理由はありますか?私はそれを使いたいです
Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1
コーディング時間を節約できるからです。どちらを使用するのが良いですか?どちらを使用しても安全ですか?パフォーマンスが向上しますか?
Add()
メソッドを使用すると、データのタイプと長さを指定することにより、特にvarchar
列に対してユーザー入力を制限できます。
.Parameters.Add("@name",SqlDbType.VarChar,30).Value=varName;
AddWithValue() (値の暗黙的な変換)メソッドの場合、nvarchar値をデータベースに送信します。
SQLキャッシュ除外プランに影響するAddWithValueの使用にはいくつかの短所もあると思います。パラメータの長さのセクションを参照してください here
通常はAddWithValueを使用します。また、列タイプが.netによるCLRタイプの変換方法と異なる場合にのみ、Add(name、dbtype ...を使用します。
AddWithValue()を使用すると、現在の値の長さのパラメーターが追加されます。パラメータ値の長さが頻繁に変わる場合、これは新しいプランが毎回生成されることを意味します。これにより、クエリの実行が遅くなり(解析、コンパイルの追加時間)、サーバーの負荷が高くなります。