IDbCommand.ExecuteNonQuery 의 리턴값 -1

  • Post author:
  • Post category:
  • Post comments:2 Comments
  • Post last modified:December 21, 2005

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'";
Author Details
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
0 0 votes
Article Rating
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
todayis
todayis
16 years ago

이 옵션을 <꺼놓으면>

상당한 성능 향상을 볼 수 있다.
그래서 SET NOCOUNT

설정하는 경우가 많다.

오타인가요? 말이 앞뒤가 안맞네여;
위의 말대로라면

라는 뜻이 되는;;

최재훈
16 years ago

지적하신 바가 맞네요. 글을 수정했습니다. -_-;;