0

私は最近、JSONシリアル化を使用してパラメーター配列をSQL Serverストアドプロシージャに渡し、そこで逆シリアル化して必要な値を抽出するチームに参加しました。つまり、各ストアドプロシージャにはVARCHAR(MAX)タイプの'@Parameters'パラメーターがあります。コマンドを作成および実行するフレームワークはC#で記述されており、標準の.NETタイプ(SqlCommand、SQlParameter)などを使用します。

シリアル化されたコンテンツの長さがしきい値よりも長い場合、ストアドプロシージャは適切に実行されていませんが、例外は発生していません。何も起こらないようです。SQLプロファイラーの実行SQLServerでストアドプロシージャを実行する試みがないことを確認しました。

例:あるケースでは、シリアル化されるプロパティが8つ以下のタイプのインスタンスが30個だけあります。シリアル化は成功し、値はSqlCommandのパラメーターコレクションのsqlパラメーターに割り当てられます(パラメーターは1つだけです)。コマンドは実行されますが、何も起こりません。タイプの出現回数が少ない場合、それは成功します。成功しない場合、例外は発生しません。

使用方法:Newtonsoftが提供するSQL Server 2008 C#.NET4.0JSONシリアル化。コード内のSqlParameterは、varcharmaxとして作成されます。クライアントサーバーアーキテクチャ-仲介サービスはありません。

SqlCommandを使用してSQLパラメーターとして渡されるJSONシリアル化値の制限を知っている人はいますか、またはこの動作を引き起こしている可能性があるものについて何か考えがありますか?

4

1 に答える 1

0

私の場合、何が起こっているのか理解しました。SQLパラメータの値のシリアル化とは何の関係もありませんでした。十分に長く(私の場合は5〜7分)待機すると、プロシージャが最終的に実行されることがわかりました。

ストアドプロシージャには、対象のレコードを抽出するために使用されているカーソルがあります(これはバッチ更新プロシージャです)。このカーソルはCLR関数を呼び出して、必要な値ごとにJsonを逆シリアル化していました。目的のデータを一時テーブルに挿入してカーソルで使用することにより、「問題」が解決されました。

于 2012-02-15T19:37:24.720 に答える