У меня есть следующий код для возврата DataTable с помощью хранимой процедуры и ввода строкового параметра @JobNumbers, который представляет собой динамически создаваемую строку номеров заданий (и, следовательно, длина неизвестна):
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 номеров заданий, и этого должно быть достаточно. Однако есть вероятность, что в нештатном случае может потребоваться больше. Итак, мне было интересно, есть ли способ установить параметр на эквивалентный тип параметра sql nvarchar (max)?
Я изучал различные похожие вопросы (Что лучше для передачи параметров в SQLCommand?), но никто конкретно не говорит, можете ли вы (или не можете) это сделать. Во-вторых, нужно ли вообще это делать, если я установил параметр @JobNumber в хранимой процедуре равным nvarchar (max) и, следовательно, по-видимому, мне вообще не нужно было бы устанавливать длину в C #? Если я это сделаю, это будет иметь потенциальные проблемы с производительностью, как указано в этом вопросе Когда следует использовать SqlDbType и размер использоваться при добавлении параметров SqlCommand??