web-dev-qa-db-ja.com

Parameters.AddおよびParameters.AddWithValueとの違い

基本的にCommandsにはParametersがあり、パラメーターにはAddAddWithValueなどのような関数があります。これまで見てきたすべてのチュートリアルで、 Addの代わりにAddWithValueを使用します。

.Parameters.Add("@ID", SqlDbType.Int)

.Parameters.AddWithValue("@ID", 1)

AddWithValueを使用しない理由はありますか?私はそれを使いたいです

Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1

コーディング時間を節約できるからです。どちらを使用するのが良いですか?どちらを使用しても安全ですか?パフォーマンスが向上しますか?

29
John Woo

Add()メソッドを使用すると、データのタイプと長さを指定することにより、特にvarchar列に対してユーザー入力を制限できます。

.Parameters.Add("@name",SqlDbType.VarChar,30).Value=varName;

AddWithValue() (値の暗黙的な変換)メソッドの場合、nvarchar値をデータベースに送信します。

26
adatapost

SQLキャッシュ除外プランに影響するAddWithValueの使用にはいくつかの短所もあると思います。パラメータの長さのセクションを参照してください here

8
learnerplates

通常はAddWithValueを使用します。また、列タイプが.netによるCLRタイプの変換方法と異なる場合にのみ、Add(name、dbtype ...を使用します。

2
Remco Ros

AddWithValue()を使用すると、現在の値の長さのパラメーターが追加されます。パラメータ値の長さが頻繁に変わる場合、これは新しいプランが毎回生成されることを意味します。これにより、クエリの実行が遅くなり(解析、コンパイルの追加時間)、サーバーの負荷が高くなります。

1
DNQ