ストアドプロシージャを使用して、動的に作成されたジョブ番号の文字列である文字列パラメーター@JobNumbersを入力する(したがって長さが不明である)DataTableを取得する次のコードがあります。
using (SqlConnection connection = new SqlConnection(con))
{
SqlCommand cmd = new SqlCommand("dbo.Mystoredprocedure", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@JobNumbers", SqlDbType.VarChar, 4000);
cmd.Parameters["@JobNumbers"].Value = JobNumber;
SqlDataAdapter da = new SqlDataAdapter(cmd);
connection.Open();
da.Fill(JobDetails);
}
ご覧のとおり、現在、JobNumberパラメーターの長さを4000に設定しています。これは、約500個のジョブ番号を取得するのに十分であり、十分なはずです。ただし、奇妙な機会にさらに必要になる可能性があります。だから、私は不思議でした、nvarchar(max)の同等のsqlパラメータタイプにパラメータを設定する方法はありますか?
同様のさまざまな質問を見ました( SQLCommandにパラメーターを渡すのに最適な方法は何ですか? )が、これを行うことができる(またはできない)かどうかを具体的に言うものはありません。第二に、ストアドプロシージャの@JobNumberパラメーターをnvarchar(max)に設定し、C#で長さを設定する必要がない場合、これを行う必要さえありますか?これを行うと、この質問で提案されているようにパフォーマンスの問題が発生する可能性があります SqlCommandパラメーターを追加するときに「SqlDbType」と「size」を使用する必要があるのはいつですか? ?
これは、nvarchar(max)を明示的に設定する方法です。
cmd.Parameters.Add("@JobNumbers", SqlDbType.NVarChar, -1);
本当にパフォーマンスに関心がある場合は、整数のテーブルを渡すことを検討してください。 https://stackoverflow.com/a/10779593/465509