1
cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = blah;

このコードでは、パラメータの長さは必須ですか?

また、このメソッドで長さパラメーターを使用していない場合、パフォーマンスまたは SQL インジェクションに関連する問題が発生しますか?

私に提案してくださいありがとう

4

3 に答える 3

2

このコードでは、パラメータの長さは必須ですか?

強制ではないと思います。しかし、それを明確にすることは良い習慣になります。SqlParameterCollection.Add(String, SqlDbType)は 2 番目のパラメーターとして取りSqlDbType、パラメーターの長さは必要ありません。ちょっとしたヒントです。列が の場合は、db タイプとしてvarchar(max)使用する必要があります。VarChar

このメソッドで長さパラメーターを使用していない場合、パフォーマンスまたは SQL インジェクションに関連する問題が発生しますか?

長さは必須ではないため、パフォーマンスの問題は無関係に見えます。また、クエリでパラメーター化された sqlを使用するため、 SQL インジェクション攻撃について心配する必要はありません。

于 2013-10-11T10:34:31.510 に答える
1

パラメータとして渡されるので、インジェクションに関しては問題ないと思います。を使用する場合の長さに関してはvarchar(max)、そのタイプをテキストとして内部的に保持するため、パフォーマンスの問題が発生します。

最後に、パラメーターを渡すときに長さを使用する必要はありません

于 2013-10-11T10:28:27.790 に答える
0

長さ引数を省略すると、データのサイズで引数が作成されます

cmd.Parameters.Add("@blah", SqlDbType.VarChar).Value = "this is 22 chars long.";

type のパラメーターを作成しますVarChar(22)。データが列に収まるかどうかを確認するために、SQL Server が作業を行う前にそのパラメータ情報を使用する可能性があります (私ならそうします)。

于 2013-10-11T12:04:47.637 に答える