OracleCommand를 사용할 때 자주 발생하는 오류 중 하나인 'OracleCommand.CommandText가 부적합합니다' 오류는 SQL 구문 오류, 연결 문제, 변수 바인딩 오류 등 다양한 이유로 발생할 수 있어요. 이 문제를 단계별로 해결하는 방법을 알아보겠습니다.
SQL 구문 확인
먼저, CommandText에 작성한 SQL 구문에 오류가 없는지 확인하세요. SQL 문법 오류, 오타, 잘못된 테이블이나 컬럼 이름이 원인일 수 있어요. Oracle은 대소문자를 구분하기 때문에 테이블과 컬럼 이름이 정확히 일치해야 합니다.
예를 들어, emp 테이블에서 사원 정보를 조회하려 할 때 SQL 구문에 오타가 있으면 아래와 같은 오류가 발생할 수 있어요.
OracleCommand command = new OracleCommand();
command.CommandText = "SELECT * FORM emp"; // 'FROM'을 'FORM'으로 잘못 입력
이 경우 FORM을 FROM으로 수정해 주면 오류가 해결됩니다.
변수 바인딩 사용
SQL 구문에 매개변수를 사용할 때는 Oracle에서 요구하는 변수 바인딩 형식을 꼭 지켜야 해요. Oracle은 매개변수 앞에 :(콜론)를 붙여서 식별하기 때문에 이를 빠뜨리면 오류가 발생할 수 있습니다.
예를 들어, emp 테이블에서 특정 사원 번호를 조회할 때는 다음과 같이 작성하세요.
command.CommandText = "SELECT * FROM emp WHERE empno = :empno";
command.Parameters.Add(new OracleParameter("empno", empnoValue));
위와 같이 매개변수 앞에 :를 붙이고, Parameters.Add를 사용해 매개변수를 연결해 줘야 SQL이 정상적으로 실행돼요. 이 과정을 생략하거나 잘못 작성하면 SQL 문이 제대로 인식되지 않아요.
OracleConnection 연결 확인
CommandText를 설정하기 전에 OracleCommand 객체가 OracleConnection 객체와 올바르게 연결되어 있는지 확인하세요. connection이 준비되지 않은 상태에서 command를 사용하면 오류가 발생할 가능성이 높아요.
아래는 emp 테이블에서 데이터를 조회하는 기본 예제입니다.
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
using (OracleCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT * FROM emp";
OracleDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader["ename"].ToString());
}
}
}
위 코드에서는 connection.Open()을 통해 데이터베이스와 연결을 연 다음, CreateCommand()로 command를 연결했어요. 연결된 상태에서 CommandText를 설정해야 오류가 발생하지 않아요.
CommandType 설정 확인
CommandType 설정도 중요해요. 기본적으로는 CommandType.Text로 설정되어 있지만, 가끔 StoredProcedure 호출 시 잘못 설정되면 오류가 날 수 있어요. SQL 문을 직접 사용할 때는 항상 CommandType.Text로 설정해 주는 것이 좋습니다.
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM emp";
만약 저장 프로시저를 호출하려면 CommandType.StoredProcedure로 설정하고 CommandText에 저장 프로시저 이름을 지정해 주세요.
위의 방법들을 차례대로 확인해 보시면 'OracleCommand.CommandText가 부적합합니다' 오류를 해결하는 데 도움이 될 거예요. 작은 실수 하나로도 오류가 발생할 수 있으니, 차근차근 하나씩 체크해 보세요!
