2013-03-08 2 views
1

데이터 테이블을 생성하는 코드를 실행합니다. 이 데이터 테이블에서 CRTY 상태 인 &을 수집합니다. PRID를 얻기 위해 코드를 실행하기 위해 이러한 정보를 사용합니다. 문제는, 이걸 실행할 때마다 Null 참조 예외가 생깁니다. 나는 코드를 실행하기 전에 int PRID = 0을 선언하려고 시도했다. 그러나, 나는 매회 0 대답으로 끝납니다. 동일한 매개 변수를 사용하여 SQLServer 2008에서 코드를 실행했습니다. 올바른 결과가 나옵니다.
이 코드가 올바르게 실행되지 않는 이유를 알 수 없습니다.null 참조 예외 가져 오기 저장 프로 시저 호출

public int GetPRID(int RRID, string State, int PCID) 
    { 
     try 
     { 

      SQLCON = new SqlConnection(connectionString); 
      SQLCON.Open(); 
      SQLCmd = new SqlCommand("spGetPRID", SQLCON); 
      SQLCmd.CommandType = CommandType.StoredProcedure; 
      SQLCmd.Parameters.Add("@RRID", SqlDbType.Int).Value = RRID; 
      SQLCmd.Parameters.Add("@State", SqlDbType.VarChar).Value = State; 
      SQLCmd.Parameters.Add("@PCID", SqlDbType.Int).Value = PCID; 

      int PRID = (Int32)SQLCmd.ExecuteScalar(); 
      return PRID; 
     } 
     catch(Exception ex) 
     { 
      HttpContext.Current.Response.Redirect("~/ErrorRedirect.aspx?" + ex.Message, false); 
      return 0; 
     } 
     finally 
     { 
      SQLCON.Close(); 
     } 
    } 
+3

어떤 줄에 예외가 있습니까? 이것은 당신과 우리에게 단서를 제공해야합니다. – JustAnotherUserYouMayKnow

+0

어떤 라인이 예외를 던집니까? – yoozer8

+0

int PRID = (Int32) SQLCmd.ExecuteScalar(); –

답변

0

문제점을 발견했습니다. 그것은 내 C# 코드가 아니 었습니다 - 그것은 SQL 자체 내에있었습니다. @PRID를 int로 선언하고 @PRID를 반환하도록 요청했습니다.

일단 이것을 제거하면 정상적으로 작동합니다. 기고에 감사드립니다.

2

이 라인은 물론

int PRID = (Int32)SQLCmd.ExecuteScalar(); 

내가 저장 프로 시저의 결과를 알 수 없습니다 여기에 문제가있다,하지만 ExecuteScalar는 NULL을 반환 수 있으며, 이러한 경우 INT32에 캐스트가 실패합니다 오류 null reference exception

MSDN says

Retur와 NS 결과 집합이 비어있는 경우, 결과 집합에서 첫 번째 행의 첫 번째 열, 또는 (Visual Basic에서 없음) 널 참조

따라서 널로서 얻을 수있는 가능성이있는 경우에 올바르게 접근 반환 값은 값이 반환되지 않으면 메모리 SQLCmd.ExecuteScalar()에서

object result = SQLCmd.ExecuteScalar(); 
    if(result != null) 
     PRID = Convert.ToInt32(result);   
1

당신에게 null 참조 예외를 줄 것이다, null를 돌려줍니다이다. 값이 반환되었지만 값이 데이터베이스 null 인 경우 BDNull.value가 반환되며 int32로 캐스팅 될 수 없으므로 실패합니다.

+0

이이 행에 return @@ Identity가 추가됩니다. 결과는 2입니다. –

+0

SQL 프로파일 러를 사용하여 사용중인 코드와 어떤 결과가 나는지 확인하십시오 예를 들면 매개 변수가 다를 수 있습니다. ExecuteScaler를 호출하면 null이 반환됩니다. –

+0

고마워, 벤. 첫 번째 코멘트는 SQL 코드 자체로 되돌아 가서 문제를 찾는데 도움이되었습니다. –