Laboratory/Develop

IDbCommand.ExecuteNonQuery 의 리턴값 -1

theking 2008. 12. 27. 16:28

IDbCommand.ExecuteNonQuery 의 리턴값 -1

posted atDecember 21th, 2005 at 5:53 am

MSDN은 IDbCommand.ExecuteNonQuery에 대해 다음과 같이 말한다.

UPDATE, INSERT 및 DELETE 문의 경우, 반환 값은 해당 명령의 영향을 받는 행의 수입니다. 다른 형식의 문이거나 롤백이 발생하면 반환 값은 -1입니다.

IDbCommand.ExecuteNonQuery이 -1을 반환하는 또다른 경우가 있다. ExecuteNonQuery가 -1 값을 반환해서, 데이터베이스를 쿼리분석기로 조회해 본다. 그런데 반환값이 의미하는 바와는 다르게 쿼리는 데이터를 변경했다. 무엇이 문제일까?

이런 경우에는SET NOCOUNT옵션이 켜져(ON) 있을 가능성이 높다. 이 옵션을 켜놓으면 상당한 성능 향상을 볼 수 있다. 그래서SET NOCOUNT ON을 기본 옵션으로 설정하는 경우가 많다.

문제를 해결하는 방법은 상당히 쉬운데 해당 쿼리문 앞에SET NOCOUNT OFF를 추가하면 된다. 다음은 예제이다.

string sqlText = "UPDATE example_table SET example_column='example'";
string sqlText = "SET NOCOUNT OFFUPDATE example_table SET example_column='example'";
 
출처 :http://kaistizen.net/EE/index.php/weblog/comments/idbcommandexecutenonquery_1/