1

この例外が発生しています:

別の未処理の結果セットがアクティブである間に、トリガーが結果セットを返したか、SET NOCOUNT OFF で実行されていました。

例とそれを回避する方法を使用して、その意味を知りたいです(SET NOCOUNT ON影響を受ける行の数を知る必要があるため)。

ここで私がやっていることの詳細な説明?

SQL Server DB にAccNodesBalという名前のテーブルがあり、そのテーブルに 3 つのトリガーがあるとします。

  • FOR UPDATE
  • INSERT
  • DELETE

データ層として ADO.net を使用しています。ご存じのとおり、FOR UPDATEINSERT、およびDELETEステートメントの戻り値は、コマンドの影響を受けた行数です。挿入または更新されるテーブルにトリガーが存在する場合、戻り値には、両方の影響を受ける行の数が含まれます。

  • 挿入または更新操作
  • およびトリガーまたはトリガーの影響を受ける行の数。

他のすべてのタイプのステートメントの場合、戻り値は -1 です。ロールバックが発生した場合、戻り値も -1 です。

私のアプリケーション(コード)では、変数でExcecuteNonQuery影響を受ける行数を使用して取得し、それが2であることを検証して、トリガーが起動され、すべてがログに記録されることを確認します。int

しかし、私はこのエラーが発生しています:

A trigger returned a resultset and/or was running with SET NOCOUNT OFF
while another outstanding result set was active.

SET NOCOUNT ON検索した結果、トリガーでキーワードを使用する必要があることがわかりました。残念ながら、トリガーは影響を受ける行の値を返さないため、これは私のアプリケーションでは機能しません。を使用せずに更新ステートメントとトリガーから影響を受ける行数を取得する別の方法を知っている人はいますSET NOCOUNT ONか?

これが私のコードです

int recCount = adpt.cmdMovementUpdate(
      amtType == EFG.Acc.AccNodeService.Contracts.Entities.AmountType.Debit ? 0 : Amount, 
      amtType == EFG.Acc.AccNodeService.Contracts.Entities.AmountType.Debit ? Amount : 0, 
      NodeID, PeriodID, Convert.ToInt16(CurrCode), Convert.ToByte(BalCurrType)); 

ここでadptTableAdapterには私の sql Updateコマンド クエリが含まれており、Web サービスによって消費される WCF サービスに実装されており、アプリケーションはこの Web サービスを消費します。

検索後、 の使用が推奨されていることがわかりましたがSET NOCOUNT ON、 から影響を受ける行の結果に依存する WCF サービスで検証があるため、それは機能しませんExecuteNonQuery

4

1 に答える 1

0

トリガーの最後に SET NOCOUNT OFF を配置して、問題が解決するかどうかを確認してください。次の http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/5ee185e6-1980-4209-87f6-abeb9c5933fa/もご覧ください。

于 2012-09-26T19:52:13.473 に答える