0

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

どんな助けでも大歓迎です。

4

1 に答える 1

1

これはSQLServerのバグであり、累積的な更新パッケージ8で問題が修正されています。

于 2012-06-07T07:50:03.447 に答える