2012-02-15 15 views
0

我最近加入了一個團隊,他們使用JSON序列化將參數數組傳遞給SQL Server存儲過程,然後在這些存儲過程中進行反序列化並提取所需的值,即每個存儲過程都有一個@Parameters '類型VARCHAR(MAX)的參數。創建和執行命令的框架用C#編寫,並使用標準.NET類型(SqlCommand,SQlParameter)等。JSON序列化和.NET SQL參數

看起來,當序列化內容的長度大於存儲過程未正確執行,但沒有例外。似乎沒有發生。運行SQL事件探查器我發現沒有嘗試在SQL Server中執行存儲過程。

例如: 在一種情況下,只有30個實例不超過8個屬性被序列化。序列化成功並將值分配給SqlCommand的參數集合中的sql參數(只有一個參數)。該命令被執行但沒有任何反應。如果某種類型的出現次數較少,則成功。當它不成功時,不會引發異常。

使用: SQL Server 2008 C#.NET 4.0 由Newtonsoft提供的JSON序列化。 代碼中的SqlParameter被創建爲varchar max。 客戶端服務器架構 - 沒有中間服務。

有誰知道JSON序列化值作爲sql參數傳遞給SqlCommand的限制,或者有什麼想法可能會導致這種行爲?

+0

您能否提供樣本@Parameters值? – 2012-02-15 09:20:20

+0

問題在於內容的長度,而不是正確形成的內容本身。我真的只是在詢問是否有人在將Json序列化值作爲sql參數傳遞時意識到了大小限制。 – Trev 2012-02-15 19:05:36

回答

0

我已經想通了我的情況發生了什麼。它與sql參數中的值的序列化無關,因爲我發現如果我等待了足夠長的時間(在我的情況下爲5-7分鐘),程序最終執行了。

在存儲過程中有一個遊標被用來提取感興趣的記錄(這是批量更新過程)。這個遊標正在調用CLR函數來爲它需要的每個值反序列化Json。通過將desirialized數據插入臨時表中以便在遊標中使用,「問題」已解決。