単純なINSERTステートメントで構成されるSQLServerストアドプロシージャをC#から呼び出しています。ExecuteNonQuery()は、更新がない場合を除いて、ステートメントOKの影響を受ける行数を返します。更新がない場合は-1になります。
これは私にはあまり意味がありません。-1行はどのように影響を受けますか?
単純なINSERTステートメントで構成されるSQLServerストアドプロシージャをC#から呼び出しています。ExecuteNonQuery()は、更新がない場合を除いて、ステートメントOKの影響を受ける行数を返します。更新がない場合は-1になります。
これは私にはあまり意味がありません。-1行はどのように影響を受けますか?
SET NOCOUNTがONの場合でも、@@ROWCOUNT関数は更新されます。
NOCOUNTそれで、あなたはオフにすることで行き止まりになっているので、これを試してください:
@@ROWCOUNTで使用ExecuteNonQuery
SPの最後で、の代わりに実行SELECT @@ROWCOUNTして使用します。これにより、希望する結果が返されます。ExecuteScalarExecuteNonQuery
挿入/削除/更新クエリを持つストアドプロシージャを使用してExecuteNonQuery()を呼び出すと、-1を取得できます。これは、ストアドプロシージャがクエリ(挿入/更新/削除)を呼び出さない場合に発生します。これを理解するのに役立つ1つの例を次に示します。
StoredProcedure- MySQL
DELIMITER $$ DROP PROCEDURE IF EXISTS sp_DML $$ CREATE PROCEDURE sp_DML 
    (
      P_Operation varchar(50)
    )BEGIN    
  if(P_Operation='Insert')
    /*  Insert Statment*/
  end if;
  if(P_Operation='Update')
    /*  Update Statment*/
    end if;
  if(P_Operation='Delete')
    /*Delete Statment*/
    end if;          
END $$
ExecuteNonQuery();を使用してこのSPを呼び出す場合。そして、パラメータP_Operationを'NoOpeartion'として渡すと、ストアドプロシージャに書き込まれた条件を満たさないため、常に-1が返されます。