2011-01-18 1 views
0

이 질문을 게시하기 전에 조사를했는데 데이터가 반환되지 않을 때 ExecuteScalar는 System.NullReferenceException을 throw합니다. 그래서 저장된 프로 시저를 "return 1"으로 수정하여 반환 값이 보장됩니다. 그러나, 나는 아직도 NULL 참조 예외를 얻고있다. 나는 내가 데이터베이스를 조회 할 수있는 권한이 알고 있도록 값을 선택할 수 있었다 스칼라를 실행 실행하면ExecuteScalar는 1을 반환하는 저장 프로 시저를 호출 할 때 NullReferenceException을 throw합니다.

 SqlCommand sqlCommand = new SqlCommand("SELECT * FROM ATableThatHasValues", conn) 

:

그래서 나는 데이터가있는 테이블을 조회 할 수있는 SqlCommand를 사용했습니다. 나는 이것이 내가 놓친 proc 권한 셋팅을 저장하고있는 것으로 의심된다.

저는 하루 종일이 문제에 매달 렸으므로 어떤 의견이나 제안도 주시면 감사하겠습니다. :(

내 코드는 다음과 같습니다

 using (SqlConnection sqlConnection = new SqlConnection(connectionString)) 
     { 
      sqlConnection.Open(); 
      using (SqlCommand sqlCommand = new SqlCommand("GetSomeValue", sqlConnection)) 
      { 
       sqlCommand.CommandType = CommandType.StoredProcedure; 
       //sqlCommand.Parameters.Add(new SqlParameter("@Id", this.ID)); 
       //sqlCommand.Parameters.Add(new SqlParameter("@State", 1 /* active */)); 

       byte retValue = (byte)sqlCommand.ExecuteScalar(); 
       return retValue; 
      } 
     } 

감사

+3

어떤 줄이 예외를 throw합니까? 스택 트레이스는 어디에 있습니까? – asawyer

+0

'ExecuteScalar'의 목적을 이해하고 있습니까? 첫 번째 데이터 행의 첫 번째 열을 반환하고 나머지는 무시됩니다. SELECT와 함께 사용하는 이유가 있습니까? –

답변

2

임의 추측

에 대한 열 1, 행 1을 읽을 수없는 데이터 세트가없는 있도록 RETURN을 사용하고 있습니다! ExecuteScalar

SELECT 또는 OUTPUT 매개 변수 사용

편집 : 사실, 그래서 무작위로하지

RETURN 1 결과 집합되지 않습니다 : 그것은 그냥 @gbn는 말에 정교한거야 "특별한"매개 변수

sqlCmd.Parameters.Add(New SqlParameter("RETURN_VALUE", SqlDbType.Int)).Direction = ParameterDirection.ReturnValue 
+0

감사합니다. 그게 효과가 있었어. 내 원래 저장된 proc 실제로 결과 집합을 반환하지만 디버깅 목적을 위해 디버깅 도움이 될 것이라고 생각 변경하지만 실제로 나를 완전히 탈선. 나는 너무나 좌절하여 전체 디버깅 프로세스를 시작한 원래의 저장된 proc에 작은 오타가 있었음을 알지 못했다. :(어쨌든, 다시 고마워요! – Bryan

3

입니다. SQL 코드를 실행하면 OUTPUT 매개 변수, 표 형식 데이터 및/또는 단일 RETURN 값의 세 가지 다른 방법으로 정보를 반환 할 수 있습니다. @ gbn처럼 RETURN 값은 본질적으로 OUTPUT 특수 매개 변수입니다. ExecuteScalar은 테이블 형식의 데이터, 즉 첫 번째 행의 첫 번째 열에있는 정보 만 볼 수 있습니다. ExecuteScalar을 호출 할 때 테이블 형식의 데이터가 수신되지 않으면 null 값이 대신 반환됩니다. 이 null 값을 가지고 뭔가를하려고하면 NRE를 얻게 될 것입니다.

+0

좋은 설명, 고마워요. – gbn