我最近加入了一个团队,他们使用 JSON 序列化将参数数组传递给 SQL Server 存储过程,然后在其中对其进行反序列化并提取所需的值,即每个存储过程都有一个 VARCHAR(MAX) 类型的“@Parameters”参数。创建和执行命令的框架是用 C# 编写的,并使用标准的 .NET 类型(SqlCommand、SQlParameter)等。
似乎当序列化内容的长度大于存储过程未正确执行但未引发异常的阈值时。似乎什么都没有发生。运行 SQL Profiler 我观察到没有尝试在 SQL Server 中执行存储过程。
例如:在一种情况下,一个类型只有 30 个实例,序列化的属性不超过 8 个。序列化成功,赋值给一个SqlCommand的参数集合中的sql参数(只有一个参数)。该命令已执行,但没有任何反应。如果某个类型的出现次数较少,则它会成功。当它不成功时,不会引发异常。
使用:Newtonsoft 提供的 SQL Server 2008 C# .NET 4.0 JSON 序列化。代码中的 SqlParameter 创建为 varchar max。客户端服务器架构 - 没有中间服务。
有谁知道使用 SqlCommand 作为 sql 参数传递 JSON 序列化值的限制,或者对可能导致这种行为的原因有任何想法?