2014-01-14 88 views
20

いつParameters. Add/AddWithValueを使用しますか?次のMSDNの例で は、彼らはあなたが少しより多くの仕事を持つすべてを明示したい場合は、Use AdddatetimeSqlCommandパラメーターの追加とAddWithValueの比較

+1

['cmd.Parameters.Add'は廃止されました。代わりに 'cmd.Parameters.AddWithValue'を使用してください。(http://stackoverflow.com/a/29554589/3936696) –

答えて

28

のために使用するのが最適です何string

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

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

ためintParameters.AddWithValueためParameters.Addを使用しています。あなたが怠けている場合は、AddWithValueを使用してください。 AddWithValueは、その値のパラメータの型を派生するので、正しい型であることを確認してください。たとえば、正しいタイプの場合は、stringintを解析する必要があります。

Addを避ける理由の1つがあります。パラメータタイプがintの場合は、another overload is chosen with the SqlDbType-enum以降はoverload that takes the parameter-name and an objectに注意する必要があります。 remarksから

:あなたは、整数パラメータ値を指定するには、 SqlParameterCollection.Addメソッドのこのオーバーロードを使用している

ご注意ください。 このオーバーロードではObject型の値が使用されるため、 のC#の例が示すように、値が0の場合は を整数型のObject型に変換する必要があります。

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

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

+0

[' cmd.Parameters.Add'は廃止されました。代わりに 'cmd.Parameters.AddWithValue'を使用してください。(http://stackoverflow.com/a/29554589/3936696) –

+4

@RahulNikate:' AddWithValue'は、パラメータの型からパラメータの型を推定するため、最良の方法でもありません。これはしばしば、悪い実行計画や不正確な変換につながります。また、最初にパラメータを検証することもしません( 'Datetime'の場合はタイプしますが、' String'を渡す場合)。 'Add(String parameterName、Object value)'のみが 'Add'の他の全てのオーバーロードを非推奨にしています。私はパラメータ名と 'SqlDbType'を取る方が好きです(文字列型の場合はサイズを指定することを検討してください)。 –

+1

'AddWithValue'は私の答えで述べた問題を回避し、' Add(string、object) 'と同じ機能を持っています。 –

関連する問題