2009-06-15 4 views
0

SQL Server 저장 프로 시저 실행 결과를 .NET 코드로 되돌려 놓는 가장 좋은 방법은 무엇입니까?SQL Server 저장 프로 시저의 결과를 .NET으로 반환하는 방법

트랜잭션에서 일련의 삭제 성공 또는 실패를 반환하려면 '선택'또는 RETURN (1) 또는 RETURN (0)과 같은 값을 사용해야하거나 행 수를 전달해야합니까? 체하는?

그러면 ExecuteNonQuery()의 반환 값이됩니까?

답변

2

ExecuteNonQuery는 트랜잭션에서 수행 된 마지막 삽입, 업데이트 또는 삭제에 영향을받는 행 수를 항상 반환합니다. RETURN (1) 또는 RETURN (0) 할 필요가 없습니다.

트랜잭션에서 많은 삭제 작업을 수행하는 중 실패하면 SqlException이 발생하여 실제로 결과를 반환 할 필요가 없습니다. 예외를 잡아서 대신 처리하십시오.

그리고 질문에 대답하기 위해 원하는 결과가 마지막으로 실행 된 명령문의 영향을받은 레코드 수이면 ExecuteNonQuery를 사용하는 것이 가장 좋습니다. 보다 구체적인 결과를 원한다면 반환 값 SqlParameter와 함께 SqlCommand를 사용하고 반환 매개 변수에 특정 값을 반환하는 것이 가장 좋습니다.

+0

RETURN은 마지막 실행 된 명령문의 영향을받은 레코드 수 이외의 특정 결과를 반환해야 할 때 가장 유용합니다. 반환 값을 얻으려면 반환 값 SqlParameter가있는 SqlCommand를 사용해야합니다. – Fung

1

예, ExecuteNonQuery()를 사용하면 영향을받는 행 수를 반환합니다. 저장 프로 시저에서 반환 할 값을 지정하려면 ExecuteScalary()를 사용할 수 있습니다.

출력 매개 변수를 사용하여 값을 반환 할 수도 있습니다. SQL 프로시 듀어에서 매개 변수를 출력 매개 변수로 선언하십시오 (예 : @ret int output). .NET 코드에서 매개 변수의 방향을 출력으로 설정하십시오. 실행 줄 다음에 ".Value"속성을 읽어이 값을 확인할 수 있습니다.

+0

감사를 출력 매개 변수를 사용할 수 있습니다 특정 시나리오에 대한 자세한 출력을 제공하기 위해, ExecuteScalar는의 값을 반환하는 가장 좋은 방법은() 무엇인가? RETURN을 사용합니까? – CRice

+1

ExeculteScalar를 사용하여 값을 반환하려면 SELECT @@ the_value_you_want_to_return을 수행하십시오. 그것은 당신이 실행중인 SQL에서 마지막 문장이어야합니다. 그러나 내부적으로 데이터 보관함이 여전히 사용되고 있기 때문에 가장 효율적인 방법은 아닙니다. 성능이 중요한 경우 SqlParameter를 반환하여 SqlCommand를 사용하십시오. 성능 향상이 실제로는 정말 작다고 말할 수 있습니다. – Fung

+0

ExecuteScalar를 사용하려는 경우 SELECT를 통해 행 수만 반환 할 수 있습니다. –

1

SP가 성공으로 완료되었음을 나타내는 0을 반환하는 문제를 나타내는 데 자주 사용되는 반환 값이 표시됩니다. 나는 일반적으로 오류 자체가 예외를 생성하지 않는 곳에서 일어난 일에 대한 정보를 반환하는 데 사용합니다. 대부분의 앱에서 재사용 할 수있는 표준 리턴 코드 세트가 있습니다.

당신이 다음뿐만 아니라

관련 문제