2012-11-05 2 views
4

sqlcommand에 사용되는 것보다 많은 매개 변수를 제공하려고합니다. 그 때문에 ORA 01036 예외가 발생합니다. 설명은 실제로 쿼리에서 사용되는 매개 변수 만 전달할 수 있다는 사실로 이어집니다.Oracle 클라이언트에서 선택적 sql 명령 매개 변수

어디에서나 찾을 수 없습니다. 정말 사실입니까?

+0

왜 당신은 더 많은 매개 변수를 전달할까요? – GolfWolf

+0

@ w0lf, 내 머리 꼭대기에서 - 제네릭 매개 변수 기본 클래스가 있기 때문에? 또는 매번 손으로 준비하고 싶지 않은 매개 변수가 많이 있습니다. 그것은 Postgres와 SqlServer를 위해 작동합니다 ... – IamDeveloper

+1

@IAmDeveloper 와우, 나는 지금까지 그것을 깨닫지 못했습니다. 그냥 SQL Server에 체크하고 * 작동합니다. – GolfWolf

답변

1
  1. 내가 Oracle 데이터베이스에 연결하는 System.Data.SqlClient.SqlConnection를 사용하여 상황을 다시 시도하고 실패했다 ... 꽤 바보 같은 내게로 제한 보인다.

  2. System.Data.OracleClient.OracleConnection을 사용하면 매개 변수 사용 여부에 관계없이 쿼리를 테스트 할 수있었습니다. 아래의 코드는 주석 처리되지 않은 'string sql ...'을 사용하여 성공적입니다. 주석 처리 된 'string sql'은 귀하의 질문에서 언급 한 동일한 오류가 발생합니다.

    StringBuilder sb = new StringBuilder(); 
    
        string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME WHERE CASE_ID = :ci"; 
        //string sql = "SELECT CASE_ID, CLAIM_NR, CLAIM_PHS_CD FROM TABLENAME"; 
    
        using (OracleConnection connection = new OracleConnection (RegistryConnectionInformation.GetDBConnString())) 
        { 
         OracleParameter ci = new OracleParameter(); 
         ci.ParameterName = "ci"; 
         ci.Value = "12345"; 
    
         OracleCommand command = new OracleCommand (sql, connection); 
         command.Parameters.Add (ci); 
    
         connection.Open(); 
         OracleDataReader reader = command.ExecuteReader(); 
    
         try 
         { 
          while (reader.Read()) 
          { 
           sb.Append (string.Format ("{0} - {1} - {2}\n", reader [ 0 ], reader [ 1 ], reader [ 2 ])); 
          } 
         } 
         catch (Exception ex) 
         { 
          sb.Append (string.Format ("{0}\n\n{1}", ex.Message, ex.StackTrace)); 
         } 
         finally 
         { 
          reader.Close(); 
         } 
        } 
    
        return sb.ToString(); 
    
  3. 이것은 당신이 올바른지 믿고 날 리드 : 오라클 쿼리에서 PARAMATERS의 수와 일치해야합니다 명령에 전달 PARAMATERS의 수를 쿼리 할 때.

    a. 오라클과 협력 할 때, 매개 변수를 쿼리에서의 사용과 동일한 순서로 유지하는 것이 좋습니다. 사용중인 DLL에 따라 매개 변수는 매개 변수 이름을 기준으로하지 않고 삽입 순서에 따라 매핑됩니다.

데이브