オーバーロードされたメソッドSqlParameterCollection.Add(String, Object)は、.NET Framework のバージョン 3.5 SP1 以降、非推奨としてマークされています。バージョン 2.0 で導入されたAddWithValue()メソッドを使用する必要があります。
Add(String, Object) が AddWithValue() に置き換えられた正当な理由はありますか? 変更には問題ありませんが、変更が行われた理由が気になります。
オーバーロードされたメソッドSqlParameterCollection.Add(String, Object)は、.NET Framework のバージョン 3.5 SP1 以降、非推奨としてマークされています。バージョン 2.0 で導入されたAddWithValue()メソッドを使用する必要があります。
Add(String, Object) が AddWithValue() に置き換えられた正当な理由はありますか? 変更には問題ありませんが、変更が行われた理由が気になります。
あなたが参照したMSDNドキュメントに記載されている誤用の可能性が原因だと思います:
SqlParameterCollection.Add メソッドのこのオーバーロードを使用して整数パラメーター値を指定する場合は注意してください。このオーバーロードは Object 型の値を取るため、次の C# の例に示すように、値がゼロの場合は整数値を Object 型に変換する必要があります。
parameters.Add("@pname", Convert.ToInt32(0));
この変換を実行しない場合、コンパイラは、SqlParameterCollection.Add (string, SqlDbType) オーバーロードを呼び出そうとしていると見なします。
実際、新しい API について参照したドキュメントには、次のように書かれています。
文字列とオブジェクトを受け取る Add のオーバーロードは、文字列と整数を渡すとパラメーター値または対応する SqlDbType 値。
を介して渡される値によるあいまいさとObject
、 の他のオーバーロードが原因だったと思いますAdd()
。渡していた値がたまたま別の、より具体的なデータ型だったために、意図せずに別のバージョンの Add() を呼び出していた状況を思い出すことができます。
古い投稿であることは承知していますが、以下をお読みください。
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
基本的にAddWithValue
、正しい型を誤って推論することがあると言われています。Add
代わりに使用してください。