皆さん、
私が間違っていない限り、パラメーター化されたSQLクエリは、パラメーターごとにSqlDbTypeを指定するかどうかによって生成できます。パラメータ名とパラメータの値のみを指定することで、SqlParameterを作成できるようです。SqlDbTypeを指定する利点は何ですか?
皆さん、
私が間違っていない限り、パラメーター化されたSQLクエリは、パラメーターごとにSqlDbTypeを指定するかどうかによって生成できます。パラメータ名とパラメータの値のみを指定することで、SqlParameterを作成できるようです。SqlDbTypeを指定する利点は何ですか?
利点は次のとおりですSqlDbType
。パラメータがどうなるかを明確に制御できます。
それ以外の場合、ADO.NETは、メソッドで指定した値に基づいて推測する必要があります.AddWithValue
。これらの推測はほとんどの場合かなり良いですが、たとえばを提供する場合DBNull.Value
、本当によく考えられた推測を行うのは少し難しいです...
また、文字列を指定する場合は、最大値を指定できると便利なことがよくあります。その文字列パラメータの長さ(ストアドプロシージャx
の定義内)。VARCHAR(x)
そうしないと、ADO.NETは現在の長さを使用しますが、それは良いことも悪いこともあります。
つまり、全体として、それはあなたにより多くのコントロールを与えるだけであり、あなたの意図がより明確で明確です。
SqlDbType を指定すると、パラメーターに指定した値が指定された SqlDbType に対して検証されるようになります。そのため、データが適合しない場合は、以前にエラーをキャッチできます (そうしないと、SQL Server から例外が発生します)。
特定のSqlDbTypeを使用することで、より多くの制御が得られることに同意します。テキストを処理するときにさらに制御したいもう1つの理由は、Unicodeテキストを処理するときです。たとえば、SqlDbType.NVarCharとSqlDbType.VarCharを使用します。
主な利点はパフォーマンスです。パラメータタイプを指定しない場合、SqlClientエンジンはパラメータ値からそれを推測します。設計時にパラメータタイプがわかっている場合は、それを指定することで、推論ステップのコストを回避できます。