web-dev-qa-db-ja.com

Parameters.Add(string、object)とParameters.AddWithValueの違い

MSDNのドキュメントと例を参照してください hereParamters.Add呼び出しの正しい構文は次のとおりです。

   command.Parameters.Add("@ID", SqlDbType.Int);
   command.Parameters["@ID"].Value = customerID; 

パラメータ名、SqlDbType、および.Valueの値を指定する必要があります。

Parameters.AddWithValue呼び出しの正しい構文は次のとおりです。

   command.Parameters.AddWithValue("@demographics", demoXml);

1行でType部分をスキップします。

私の質問は次のとおりです。このようにするとどうなるのですか。

   command.Parameters.Add("@demographics", demoXml);
   // .Add method with .AddWithValue syntax

コンパイルエラーは発生せず、さらに奇妙なことに、コードが実行されたときにすべてが正常に動作しているようです。

48
phadaphunk

違いは、AddWithValueを使用する場合の暗黙的な変換です。実行中のSQLクエリ(ストアドプロシージャ)がint、nvarcharなどの型の値を受け入れていることがわかっている場合、コードで再宣言する理由はありません。

複雑な型のシナリオ(例:DateTime、float)の場合、Addを使用しますが、これはより明示的ですが、より単純な型のシナリオ(IntからInt)ではAddWithValueです。

8
Dennis Rongo

command.Parameters.Add("@ID", SqlDbType.Int);のようにタイプを明示的に指定しないと、入力を予期したものに暗黙的に変換しようとします。

この欠点は、暗黙的な変換が最適な変換ではなく、パフォーマンスが低下する可能性があることです。

このまさにトピックに関する議論がここにあります: http://forums.asp.net/t/1200255.aspx/1

3
Khan

commandObj.Parameter.Add()を使用する場合、最初に2つのパラメーターを受け取り、2番目のパラメーターはデータ型ですが、。

CommandObj.Parameter.Add("@ID",SqlDbType.Int).Value=textBox1.Text;

//.AddWithValueの場合

CommandObj.Parameter.AddWitheValue("@ID",textBox1.Text);

iDは、データ型がIntであるストアドプロシージャのパラメーターです。

機能面で違いはありません


addwithvalueメソッドは、値としてオブジェクトを取ります。型データ型のチェックはありません。データ型がSQLテーブルと一致しない場合、潜在的にエラーが発生する可能性があります。 addメソッドでは、最初にデータベースタイプを指定する必要があります。これは、このようなエラーを減らすのに役立ちます。

詳細については、 ここをクリックしてください

0
Brijesh Mavani