JSON序列化和.NET SQL参数

时间:2012-02-15 09:10:09

标签: json sqlcommand sqlparameter

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

当序列化内容的长度大于阈值时,似乎存储过程未正确执行但没有引发异常。似乎没有任何事情发生。运行SQL事件探查器我发现没有尝试在SQL Server中执行存储过程。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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