mar*_*cob 16 c# ado.net sql-server-2008
我在一个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.
Run Code Online (Sandbox Code Playgroud)
考虑这里的异常消息和文档:http://msdn.microsoft.com/en-us/library/ms143432.aspx我希望能够在一个查询中有2100个参数,但这似乎不是真正.有谁知道为什么?我错过了什么吗?
(我使用的是Sql Server 2008 R2)
Mar*_*ith 20
发送到SQL Server的命令是
exec sp_executesql
N'SELECT P0 = @p0, P1 = @p1, P2 = @p2...',
N'@p0 int,@p1 int,@p2 int...',
@p0=0,@p1=1,@p2=2...
Run Code Online (Sandbox Code Playgroud)
请注意,调用中的2个参数槽用于查询文本和参数定义sp_executesql的NVARCHAR字符串,因此"仅"允许您使用2,098.
| 归档时间: |
|
| 查看次数: |
5275 次 |
| 最近记录: |