単純なINSERTステートメントで構成されるSQLServerストアドプロシージャをC#から呼び出しています。ExecuteNonQuery()は、更新がない場合を除いて、ステートメントOKの影響を受ける行数を返します。更新がない場合は-1になります。
これは私にはあまり意味がありません。-1行はどのように影響を受けますか?
単純なINSERTステートメントで構成されるSQLServerストアドプロシージャをC#から呼び出しています。ExecuteNonQuery()は、更新がない場合を除いて、ステートメントOKの影響を受ける行数を返します。更新がない場合は-1になります。
これは私にはあまり意味がありません。-1行はどのように影響を受けますか?
SET NOCOUNTがONの場合でも、@@ROWCOUNT関数は更新されます。
NOCOUNT
それで、あなたはオフにすることで行き止まりになっているので、これを試してください:
@@ROWCOUNT
で使用ExecuteNonQuery
SPの最後で、の代わりに実行SELECT @@ROWCOUNT
して使用します。これにより、希望する結果が返されます。ExecuteScalar
ExecuteNonQuery
挿入/削除/更新クエリを持つストアドプロシージャを使用して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が返されます。