0

オーバーロードされたメソッドSqlParameterCollection.Add(String, Object)は、.NET Framework のバージョン 3.5 SP1 以降、非推奨としてマークされています。バージョン 2.0 で導入されたAddWithValue()メソッドを使用する必要があります。

Add(String, Object) が AddWithValue() に置き換えられた正当な理由はありますか? 変更には問題ありませんが、変更が行われた理由が気になります。

4

3 に答える 3

4

あなたが参照したMSDNドキュメントに記載されている誤用の可能性が原因だと思います:

SqlParameterCollection.Add メソッドのこのオーバーロードを使用して整数パラメーター値を指定する場合は注意してください。このオーバーロードは Object 型の値を取るため、次の C# の例に示すように、値がゼロの場合は整数値を Object 型に変換する必要があります。

parameters.Add("@pname", Convert.ToInt32(0));

この変換を実行しない場合、コンパイラは、SqlParameterCollection.Add (string, SqlDbType) オーバーロードを呼び出そうとしていると見なします。

実際、新しい API について参照したドキュメントには、次のように書かれています。

文字列とオブジェクトを受け取る Add のオーバーロードは、文字列と整数を渡すとパラメーター値または対応する SqlDbType 値。

于 2010-10-05T11:17:14.977 に答える
0

を介して渡される値によるあいまいさとObject、 の他のオーバーロードが原因だったと思いますAdd()。渡していた値がたまたま別の、より具体的なデータ型だったために、意図せずに別のバージョンの Add() を呼び出していた状況を思い出すことができます。

于 2010-10-05T11:18:23.750 に答える
0

古い投稿であることは承知していますが、以下をお読みください。

https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

基本的にAddWithValue、正しい型を誤って推論することがあると言われています。Add代わりに使用してください。

于 2018-08-01T04:56:50.537 に答える