2014-07-22 3 views
-1

데이터베이스에 아래 코드로 저장 프로 시저가 있습니다. 이 저장 프로 시저에 매개 변수를 전달할 때 데이터가 반환되고 while 루프에서 올바른 형식 예외가 아닌 입력 문자열이 읽히는 경우에도 쿼리 매개 변수에 값을 하드 코딩합니다. 입력 문자열의 형식이 올바르지 않습니다. C#

var response = DataAccessBridge.IADODao.CommandWrapperSelect<List<FeaturePack>>(command => 
     { 
      var result = new List<FeaturePack>(); 
      const string storedProc = "dbo.usp_PSTN_GetFeaturePacks"; 


      // Add the input parameter and set its properties. 
      SqlParameter parameter = new SqlParameter(); 
      parameter.ParameterName = "@FeaturePack"; 
      parameter.SqlDbType = SqlDbType.Int; 
      parameter.Direction = ParameterDirection.Input; 
      parameter.Value = featurePackId; 

      command.CommandType = CommandType.StoredProcedure; 
      command.Parameters.Add(parameter); 
      command.CommandText = storedProc; 

      var dataReader = command.ExecuteReader(); 

      while (dataReader.Read()) 
      { 
       result.Add(new FeaturePack 
       { 
        FeaturePackId = Convert.ToInt32(dataReader["featurePack"].ToString()), 
        FeatureId = Convert.ToInt32(dataReader["featureId"].ToString()), 
        Description = dataReader["Description"].ToString(), 
        AlwaysOn = Convert.ToInt32(dataReader["alwaysOn"].ToString()), 
       }); 
      } 

      return result; 
     }); 

위의 저장된 프로 시저를 실행하고 매개 변수를 추가하고 while 루프에서 나는이 예외가 내 코드입니다. 아무도 나에게 이것이 왜 던져지고 있는지 어떤 단서를 줄 수 있니?

featurePackId 

파라미터

하드 1 본 실시 예에서는 부호화 및 여전히 오류를 수신한다.

+1

프로 시저에서 'featurePack'에 대해 반환하는 데이터 형식은 무엇이며 proc에서 매개 변수로 지정된 형식도 무엇입니까? 당신이'null'을 다시 얻고 있을지도 모르는데,'DBNull.Value'로 확인하십시오. – Habib

+0

예외가 발생하는 행은 무엇입니까? 코드를 단계별로 실행할 때 문자열에 어떤 값이 표시됩니까? – mason

+2

while 루프를 디버깅하면 문제를 일으키는 값을 볼 수 있으며 그 원인을 명확히 알 수 있습니다. 또는 예외가 발생하면 중단되도록 설정하십시오. http://msdn.microsoft.com/en-us/library/d14azbfh.aspx. 반환되는 데이터는 추측 할 수 없지만 볼 수는 있습니다. – Tanner

답변

0

당신이 우리를 말하지 않았다하더라도, 당신은 거의 확실이 라인 중 하나에 예외를 받고있어 :

FeaturePackId = Convert.ToInt32(dataReader["featurePack"].ToString()), 
FeatureId = Convert.ToInt32(dataReader["featureId"].ToString()), 

AlwaysOn = Convert.ToInt32(dataReader["alwaysOn"].ToString()), 

과 행 중 하나의 값을가로 변환 할 수 없기 때문에이 될 것입니다 정수. 실패한 행을 찾으려면 코드를 디버그하고 실패한 행에 대해서는 featurePack, featureIdalwaysOn의 값이 무엇인지 확인해야합니다. 그 중 하나는 정수 값이 아닙니다.

관련 문제