Tôi đang sắp xếp các truy vấn khác nhau trong một SqlCommand dừng lô truy vấn khi tôi đạt đến giới hạn tham số 2100. Nếu lô của tôi có thông số 2100 hoặc 2099, tôi vẫn nhận được ngoại lệ.Các tham số tối đa SqlCommand ngoại lệ tại thông số 2099
Các mã kiểm tra sau ném 'quá nhiều thông số ngoại lệ' ngay cả khi số lượng các thông số nhỏ hơn 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.
Xét nhắn ngoại lệ và tài liệu ở đây: http://msdn.microsoft.com/en-us/library/ms143432.aspx Tôi đã chờ đợi để có thể có 2100 tham số trong một truy vấn, nhưng điều này dường như không đúng. Có ai biết tại sao không? Tui bỏ lỡ điều gì vậy?
(Tôi đang sử dụng SQL Server 2008 R2)
Bạn đang sử dụng số lượng thông số lớn này để làm gì? Bạn đã cân nhắc sử dụng tham số có giá trị bảng thay thế chưa? –
Nó có hoạt động với 2098/2097/etc không. Tôi nghĩ rằng có một tham số ReturnValue rằng SQL đã mặc định. –
Tôi không thể sử dụng nó theo thiết kế, tôi ổn với việc tách các truy vấn thành nhiều lô. Tôi chỉ muốn biết tại sao tôi không thể sử dụng 2100 thông số như nó nói. – marcob