C#에서 '결과 집합에서 지정된 열을 찾을 수 없습니다.' 오류는 OracleDataReader를 통해 데이터를 리딩할 때에, 해당하는 열을 찾을 수 없는 경우에 발생합니다.
다음은 오류가 발생하였을 때 표시되는 스택 예제입니다. 🙂 이 오류가 발생했을 때의 스택 트레이스를 보면 오류가 발생한 지점을 명확하게 확인할 수 있답니다.
위치: OracleInternal.ServiceObjects.OracleDataReaderImpl.GetColumnOrdinal(String colName)
위치: Oracle.ManagedDataAccess.Client.OracleDataReader.GetOrdinal(String name)
위치: Oracle.ManagedDataAccess.Client.OracleDataReader.get_Item(String columnName)
위치: BeomSang.GetData(IDataReader dataReader) 파일 C:\BeomSang\BeomSang\BeomSang.cs:줄 0
//결과 집합에서 지정된 열을 찾을 수 없습니다.
마지막으로 오류가 발생한 위치는 오라클 인터널 부분인 것을 알 수 있는데요, 스택 트레이스에서 볼 수 있는 바와 같이 'GetColumnOrdinal' 메서드가 호출되었을 때, 요청한 열 이름(colName)을 찾지 못해 발생한 오류를 보여줄 것입니다. 이는 'OracleDataReader'의 'GetOrdinal' 메서드를 통해 컬럼 값을 가져오려 할 때, 해당 컬럼이 존재하지 않으면 예외가 발생하는 것이지요~
결과 집합에서 찾으려는 Ordinal 값을 확인해 주세요. 보통 새롭게 추가한 컬럼에 의해 발생하는 경우가 많고, 셀렉트 문에서 콤마를 누락하여 발생하는 경우도 있습니다.
먼저, SQL 쿼리를 확인하여 요청한 열이 실제로 쿼리 결과에 포함되어 있는지 확인해야 합니다. 열 이름을 잘못 입력했거나, 쿼리에서 누락되었을 수 있습니다.
- 쿼리에서 열 이름을 확인하고, 코드에서 사용한 열 이름과 일치하는지 확인해야 합니다.
- 쿼리를 수정하거나 새로운 열을 추가한 경우, 해당 변경 사항이 코드에도 반영되었는지 확인해야 합니다. 새로운 열이 추가되었을 때, 이를 사용하는 코드에서 해당 열을 제대로 처리하고 있는지 확인합니다.
- 코드에서 열을 찾지 못할 경우를 대비해 예외 처리를 추가하여, 오류를 로그에 기록하여 디버깅 할 수 있도록 사전에 대비하는 방법도 좋습니다.