【问题标题】:JSON Serialization and .NET SQL ParametersJSON 序列化和 .NET SQL 参数
【发布时间】:2012-02-15 09:10:09
【问题描述】:

我最近加入了一个团队,他们正在使用 JSON 序列化将参数数组传递给 SQL Server 存储过程,然后在其中对其进行反序列化并提取所需的值,即每个存储过程都有一个 VARCHAR(MAX) 类型的“@Parameters”参数)。创建和执行命令的框架是用 C# 编写的,并使用标准的 .NET 类型(SqlCommand、SQlParameter)等。

似乎当序列化内容的长度大于阈值时,存储过程没有被正确执行,但没有引发异常。似乎什么都没有发生。运行 SQL Profiler 我观察到没有尝试在 SQL Server 中执行存储过程。

例如: 在一种情况下,只有 30 个类型的实例,其中被序列化的属性不超过 8 个。序列化成功,赋值给一个SqlCommand的参数集合中的sql参数(只有一个参数)。该命令已执行,但没有任何反应。如果某个类型的出现次数较少,则它会成功。如果不成功,则不会引发异常。

使用: SQL Server 2008 C# .NET 4.0 由 Newtonsoft 提供的 JSON 序列化。 代码中的 SqlParameter 创建为 varchar max。 客户端服务器架构 - 没有中间服务。

是否有人知道 JSON 序列化值作为 SqlCommand 的 sql 参数传递的限制,或者对可能导致这种行为的原因有任何想法?

【问题讨论】:

  • 您能提供示例@Parameters 值吗?
  • 问题在于内容的长度而不是正确形成的内容本身。我真的只是想知道在将 Json 序列化值作为 sql 参数传递时是否有人知道大小限制。

标签: json sqlcommand sqlparameter


【解决方案1】:

我已经弄清楚我的情况发生了什么。它与 sql 参数中的值的序列化无关,因为我发现如果我等待的时间足够长(在我的情况下为 5 -7 分钟),该过程最终会执行。

在存储过程中有一个游标用于提取感兴趣的记录(这是一个批量更新过程)。此游标正在调用 CLR 函数来反序列化 Json 以获取所需的每个值。通过将反序列化的数据插入到临时表中以供游标使用,“问题”得到了解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多