2011-11-05 2 views
1

SQL 삽입 문을 실행 중입니다. "PK는"자동 증가 키 값으로,이다INSERT 문에 대한 SqlDataReader의 기본 예외 검색

INSERT INTO Table (fk1, value1) OUTPUT inserted.pk VALUES ('fkv1', 'v1'); 

:

SqlDataReader reader = cmd.ExecuteReader(); 

외래 키는 부모 테이블과 충돌, 그리고 reader.HasRows은()이 반영하지만 어떻게 오류 설명과 함께 던져진 실제 예외 개체를 검색 할 수 있습니까? "OUTPUT"문을 제거하면 예외가 발생하지만 오류가 발생하여 "HasRows"== false가 반환됩니다.

"결과보기"속성에서 디버거를 사용하여 오류가 표시 될 수 있지만 코드에서이 값을 얻으려면 어떻게해야합니까? 어떤 도움

SQL 서버 2008R2 .NET 4.0

감사합니다.

편집 :

이 호출은 예외를 발생시키지 않습니다. 성공적으로 완료되지 않았다는 유일한 표시는 "HasRows"가 false라는 것입니다.

+5

try/catch 블록으로이 코드를 둘러 보았습니까? –

+0

예외 정보를 얻으려면'catch (ExceptionType ex)'를 꼭 확인하십시오. – Ryan

답변

3
try 
{ 
    SqlDataReader reader = cmd.ExecuteReader(); 
} 
catch(Exception ex) 
{ 
    string errorMessage = String.Format(CultureInfo.CurrentCulture, 
         "Exception Type: {0}, Message: {1}{2}", 
         ex.GetType(), 
         ex.Message, 
         ex.InnerException == null ? String.Empty : 
         String.Format(CultureInfo.CurrentCulture, 
             " InnerException Type: {0}, Message: {1}", 
             ex.InnerException.GetType(), 
             ex.InnerException.Message)); 

    System.Diagnostics.Debug.WriteLine(errorMessage); 
} 
0

예외를 생성하는 SQL 조각이 있지만 try catch가 catch하고 있지 않습니다. - 그럴 정도로 이상합니다!

는 hec_recommendation.RecID, hec_recommendation.UtilityID, hec_recommendation를 선택

은 여기 여기에 도움은 SQL이 실행되는 실행되는 SQL입니다 경우 코드

try 
{ 
    // Run the SQL statement, and then get the returned rows to the DataReader. 

    SqlDataReader MyDataReader = MyCommand.ExecuteReader(); 

    //note AT THIS POINT there is an exception in MyDataReader 
    //if I view MyDataReader in Watch I see this in base->ResultsView->base 
    //Conversion failed when converting the varchar value 'lwang' to data type int 
    //and errors count is 1 but there is no exception catch!! 

    int iRow = 0; 
    if (MyDataReader.HasRows) 
    { 
     int iCol = 0; 
     while (MyDataReader.Read()) 
     { 

      //dt.Load(MyDataReader); 
      List<String> strFields = new List<String>(); 

      for (int iField = 0; iField < MyDataReader.FieldCount; iField++) 
      { 
       strReturn = strReturn + MyDataReader[iField] + ","; 
       strFields.Add(MyDataReader[iField].ToString()); 
      } 
      DataRows.Add(strFields); 
      iRow++; 
     } 
    } 
} 
catch (Exception ex) 
{ 
    //no exception is caught in this case!! This code is never reached!! 
    strError = "An error occurred getting the data table: " + MyCommand.CommandText + " " + ex.ToString(); 
    throw new Exception(strError); 
    return (DataRows); 
} 
finally 
{ 
    Connection.Close(); 
} 
    return (DataRows); 
} 

입니다. CatID, hec_recommendation.Condition, hec_recommendation.RecommendationText, hec_recommendation.Active, hec_recommendation.Ordinal, hec_recommendation.StartDate, hec_recommendation.EndDate, hec_recommendation.CreateDate, hec_recommendation.C reatedByID, hec_recommendation.ModifyDate, hec_recommendation.ModifyByID hec_reccategory hec_recommendation, hec_utility에서 어디 hec_recommendation.utilityid = hec_utility.id 및 hec_recommendation.catid = hec_reccategory.catid 및 hec_reccategory.utilityid = hec_utility.utilityid 및 hec_utility.utilityId = ' lwang '

+3

질문이 있으시면 ... [질문] (http://stackoverflow.com/questions/ask) :-) – kleopatra