Как создать параметр NVarchar (max) Sql в C #?

У меня есть следующий код для возврата 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??


person sr28    schedule 13.01.2014    source источник
comment
Взгляните сюда: stackoverflow.com/questions/973260/   -  person Eugene    schedule 13.01.2014
comment
Было бы лучше использовать тип данных, который, естественно, поддерживает хранение нескольких отдельных элементов данных, а не эту строку. Два типа, которые выступают как поддерживающие их, - это сами таблицы (в виде отдельных строк для каждого элемента) или XML.   -  person Damien_The_Unbeliever    schedule 13.01.2014


Ответы (1)


Вот как вы явно устанавливаете nvarchar (max):

cmd.Parameters.Add("@JobNumbers", SqlDbType.NVarChar, -1);

Если вас действительно беспокоит производительность, вы можете рассмотреть возможность передачи таблицы целых чисел: https://stackoverflow.com/a/10779593/465509

person Sam7    schedule 13.01.2014
comment
разве вы не имеете в виду SqlDbType.NVarChar? - person Eugene; 13.01.2014
comment
Ну, это зависит от того, какой тип данных вы хотите. И VarChar, и NVarChar работают. Столбец nvarchar может хранить любые данные Unicode. Столбец varchar ограничен 8-битной кодовой страницей. Для получения дополнительной информации: stackoverflow.com/a/147302/465509 - person Sam7; 13.01.2014
comment
Вы сами сказали в строке выше, что нужен был nvarchar (max), так почему тогда вы использовали SqlDbType.VarChar? - person robertc; 02.03.2015
comment
Спасибо, что заметили. Поскольку в названии написано NVarchar (max), я сделаю его последовательным NVarchar. - person Sam7; 03.03.2015