Stackoverflow を調べたところ、ほぼ同じ質問が見つかりました here。1年前に質問されましたが、まだ誰も答えていません。たぶん私は user1038334 よりも幸運で、誰かが私を助けてくれるでしょう。
何か奇妙なことが起こるまで、何日も正常に機能する SQL CLR ストアド プロシージャがあります。私のストアド プロシージャはテーブルを更新し、結果コードとして値を返します。したがって、この値を見ることで、何か問題があったかどうかを判断できます。問題は、この結果値を受け取ることです。C# コードは、戻り値を受け取った時点で例外をスローします。
var returnValue = new SqlParameter {Direction = ParameterDirection.ReturnValue};
command.Parameters.Add(returnValue);
connection.Open();
command.ExecuteNonQuery();
return (int)returnValue.Value; //<-- here is an exception
そして面白いことに、SQL プロファイラーに接続してクエリをキャッチし、SQL Server Management Studio 内でこのクエリを実行すると、問題なく結果値を取得できます。
DECLARE @RC INT
EXECUTE @RC = MyClrStoreProc
SELECT @RC
CLR アセンブリを再発行するか、SQL Server を再起動すると、すべてが修正されます。
このような奇妙な動作には理由があるはずですが、見つかりません。
SQL Server のバージョン: Microsoft SQL Server Developer Edition (64 ビット) - v.10.50.1765.0
ホスト OS バージョン: Microsoft Windows NT 6.1 (7601)
.Net バージョン: v4.0.30319
どんな助けでも大歓迎です。