Подготовка команды со структурированными параметрами - PullRequest
0 голосов
/ 18 июля 2011

У меня есть этот объект команды ADO.NET, и я могу установить некоторые параметры и выполнить его успешно.

_mergecommand.Parameters.Add (new SqlParameter ("values", SqlDbType.Structured));_mergecommand.Parameters ["values"]. TypeName = "strlist";_mergecommand.Parameters ["values"]. Direction = ParameterDirection.Input;

_mergecommand.Parameters ["values"]. Value = valuelist;_mergecommand.ExecuteNonQuery ();

Это отлично работает.Но я хочу подготовить эту команду перед ее выполнением, потому что мне нужно выполнить ее миллионы раз.Я использую SQL Server 2008. Я получаю эту ошибку, если пытаюсь подготовить ее.

Метод SqlCommand.Prepare требует, чтобы все параметры переменной длины имели явно установленный ненулевой размер.

Любая идеякак это сделать?

Ответы [ 2 ]

1 голос
/ 05 января 2017

Это старый, но, кажется, правильный ответ, который должен использовать -1 в качестве размера, например:

_mergecommand.Parameters.Add(new SqlParameter("values", SqlDbType.Structured, -1));
0 голосов
/ 18 июля 2011

Если вам приходится делать это миллионы раз с помощью такой команды, вероятно, это не очень хорошая стратегия.

Можете ли вы сериализовать ваши данные в строку XML и передать их как один аргумент? Это значительно снизит нагрузку на вашу сеть и SQL Server .... хотя, вероятно, будет гораздо сильнее воздействовать на вашего клиента.

Если вы намерены делать это таким образом, возможно, вы ищете перегрузку метода SqlCommand.Parameters.Add:

_mergecommand.Parameters.Add("@values", System.Data.SqlDbType.NVarChar, 100).Value = foo; 

это больше похоже на то, что вы хотели?

...