cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = blah;
このコードでは、パラメータの長さは必須ですか?
また、このメソッドで長さパラメーターを使用していない場合、パフォーマンスまたは SQL インジェクションに関連する問題が発生しますか?
私に提案してくださいありがとう
cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = blah;
このコードでは、パラメータの長さは必須ですか?
また、このメソッドで長さパラメーターを使用していない場合、パフォーマンスまたは SQL インジェクションに関連する問題が発生しますか?
私に提案してくださいありがとう
このコードでは、パラメータの長さは必須ですか?
強制ではないと思います。しかし、それを明確にすることは良い習慣になります。SqlParameterCollection.Add(String, SqlDbType)
は 2 番目のパラメーターとして取りSqlDbType
、パラメーターの長さは必要ありません。ちょっとしたヒントです。列が の場合は、db タイプとしてvarchar(max)
使用する必要があります。VarChar
このメソッドで長さパラメーターを使用していない場合、パフォーマンスまたは SQL インジェクションに関連する問題が発生しますか?
長さは必須ではないため、パフォーマンスの問題は無関係に見えます。また、クエリでパラメーター化された sqlを使用するため、 SQL インジェクション攻撃について心配する必要はありません。
パラメータとして渡されるので、インジェクションに関しては問題ないと思います。を使用する場合の長さに関してはvarchar(max)
、そのタイプをテキストとして内部的に保持するため、パフォーマンスの問題が発生します。
最後に、パラメーターを渡すときに長さを使用する必要はありません
長さ引数を省略すると、データのサイズで引数が作成されます
cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = "this is 22 chars long.";
type のパラメーターを作成しますVarChar(22)
。データが列に収まるかどうかを確認するために、SQL Server が作業を行う前にそのパラメータ情報を使用する可能性があります (私ならそうします)。