Я пакетирую разные запросы в одной SqlCommand, останавливая пакет запросов, когда я достигаю предела 2100 параметров.Если моя партия имеет параметры 2100 или 2099, я все равно получаю исключение.
Следующий тестовый код выдает «исключение слишком большого количества параметров», даже если число параметров меньше 2100.
var parametersMax = 2099;
var connection = new SqlConnection(@"Data Source=.;Integrated Security=SSPI;");
connection.Open();
var enumerable = Enumerable.Range(0, parametersMax);
var query = string.Format("SELECT {0}", String.Join(", ", enumerable.Select(s => string.Format("P{0} = @p{0}",s))));
var command = new SqlCommand(query, connection);
foreach(var i in enumerable)
command.Parameters.Add(string.Format("p{0}",i), i);
// here: command.Parameters.Count is 2099
var reader = command.ExecuteReader(); // throws: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100.
Учитывая сообщение об исключении и документацию здесь: http://msdn.microsoft.com/en-us/library/ms143432.aspx Я ожидал, что смогу иметь 2100 параметров в одном запросе, но это не так.Кто-нибудь знает почему?Я что-то упустил?
(я использую Sql Server 2008 R2)