У меня есть следующий код, чтобы тянуть назад DataTable с помощью хранимой процедуры и ввода параметров строки @JobNumbers, которая динамически создаваемые строки чисел заданий (и, следовательно, длина неизвестна):Как создать NVarchar (max) Sqlparameter в C#?
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)?
Я рассмотрел различные подобные вопросы (What's the best method to pass parameters to SQLCommand?), но никто не говорит, можете ли вы (или не можете) это сделать. Во-вторых, это даже необходимо сделать, если я установил параметр @JobNumber в хранимой процедуре на nvarchar (max), и поэтому, по-видимому, мне не нужно было бы устанавливать длину в C# вообще? Если я это сделаю, это будет иметь потенциальные проблемы с производительностью, как предложено в этом вопросе When should "SqlDbType" and "size" be used when adding SqlCommand Parameters??
Посмотрите здесь : http://stackoverflow.com/questions/973260/what-size-do-you-use-for-varcharmax-in-your-parameter-declaration – Eugene
Лучше использовать тип данных, который, естественно, поддерживает хранение нескольких отдельных данных вместо этой строки. Два типа, которые выпрыгивают в качестве поддержки, - это сами таблицы (в виде отдельных строк для каждого элемента) или XML. –