IDbCommand.ExecuteNonQuery 의 리턴값 -1

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 OFF UPDATE example_table SET example_column='example'";

최 재훈

블로그, 페이스북, 트위터 고성능 서버 엔진, 데이터베이스, 지속적인 통합 등 다양한 주제에 관심이 많다.
Close Menu