gpt4 book ai didi

c# - SqlCommand 最大参数异常在 2099 个参数

转载 作者:可可西里 更新时间:2023-11-01 03:08:44 25 4
gpt4 key购买 nike

我在一个 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)

最佳答案

发送到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...

请注意,sp_executesql 调用中的 2 个参数槽被用于查询文本的 NVARCHAR 字符串占用,因此参数定义“仅”留下 2,098 个空闲供您使用。

关于c# - SqlCommand 最大参数异常在 2099 个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8050091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com