2009-02-06 9 views
5

당신이당신은 sproc에 마지막 문을 수행 할 때

int blah = Convert.ToInt32(cmd.ExecuteScalar()); 

를 사용할 수 @Value cmd.ExecuteScalar를 사용할 수 :

SELECT가

또한 @Value이 나에게 객체는 null 예외를 제공합니다 :

int blah = (int)cmd.ExecuteScalar(); 

convert.toint32 및 (int) 같은 것은 아니지만 하나는 다른 래퍼입니까?

답변

8

아니요, 할 수 없습니다. ExecuteScalar() 메서드는 결과 집합에 반환되는 단일 값으로 반환하도록 설계되었습니다. 기본적으로 첫 번째 행의 첫 번째 열에있는 값이 반환됩니다.

반환 값을 얻으려면 SQLCommand 개체에 매개 변수를 추가해야합니다. "@RETURN_VALUE"라는 이름을 사용하고 매개 변수 객체를 생성 할 때 Return이라는 매개 변수 방향을 지정하십시오. 그런 다음 ExecuteNonQuery() 메서드를 사용할 수 있습니다.

IMO의 스토어드 프로 시저 반환 값은 프로 시저의 상태를 나타내야합니다. 모든 데이터는 결과 세트 또는 출력 매개 변수를 통해 리턴되어야합니다.

3

다른 질문에 답하려면 (int)는 실제로 변환 (Convert.ToInt32)과 다른 캐스트입니다.

캐스트에서 사용자는 캐스팅되는 개체가 실제로 캐스팅 할 형식이므로 실제로 변환/구문 분석을 수행하지 않는다고 말하는 것입니다. int가 null 일 수 없기 때문에, 캐스팅하는 객체가 null이며 예외가 발생하면 캐스트가 유효하지 않습니다.

변환을 사용하면 실제 구문 분석과 논리가 수행되며 변환되는 개체가 null 인 상황을 처리합니다.

이 부분에 대한 자세한 정보가 있습니다. here.

관련 문제