2014-01-30 2 views
0

을 던져 나는 다음과 같은 코드가 있습니다 코드가 잘 때로는 다른 사람들이 눈치 디버깅 후 나던 작동 어떤 이유OracleDataReader HasRows 잘못된 번호 예외

int count = 0; 
OracleDataReader dr; 
parameters = new Dictionary<string, string>(); 
parameters.Add("Username", UserName); 

query = "Select KEY from TABLE1 where USERID=:Username AND KEY IN("; 

foreach (string Location in Locations) 
{ 
    query = query + ":Loc" + count.ToString() + ","; 

    parameters.Add("Loc" + count.ToString(), Location); 

    count++; 
} 
query=query.TrimEnd(','); 
query = query + ")"; 

dr=objConexion.ExecuteQuery(query, parameters, objConexion.OracleCnn); 


public OracleDataReader ExecuteQuery(String query, Dictionary<string,string> Parameters, OracleConnection oracleCnn) 
{ 
    OracleDataReader OracleDr; 
    OracleCommand OracleCmd; 
    try 
    { 


     OracleCmd = oracleCnn.CreateCommand(); 
     OracleCmd.CommandText = query; 


     foreach (KeyValuePair<string, string> kvp in Parameters) 
     { 

      OracleCmd.Parameters.AddWithValue(kvp.Key, kvp.Value); 

     } 

     OracleCmd.Prepare(); 
     OracleDr = OracleCmd.ExecuteReader(); 

    } 
    catch 
    { 
     OracleDr = null; 
    } 

    return OracleDr; 
} 

을 그것이 작업의를 나던 때 Datareader는 "HasRows"메서드, 특히 잘못된 번호 예외에 대한 예외가 있습니다. 결과를 직접 DBMS에서 실행하려고 시도하고 완벽하게 실행됩니다. 왜이 예외가 발생하는지 알 수 있습니까? 내가 뭘 놓치고 있니?.

+0

예외를 제공 할 수 있습니까? 아니면 그냥 InvalidNumber입니까? - 문자열을 숫자로 변환하지 못하면 InvalidNumber가 oracle에서 throw됩니다. 표 형식에 열 설명을 입력하십시오. – Christian13467

+0

ORA-01722 : 번호가 잘못되었습니다 (디버그에서 볼 때) : HasRows \t 'dr.HasRows'가 'System.Data.OracleClient.OracleException'예외를 생성했습니다. 그들은 내가 선택하는 키 열은 INTEGER이고 UserID는 varchar2입니다 – user3255067

답변

0

는 찾아 다음 문제 수행, 당신은주십시오 sql error "ORA-01722: invalid number"

를 참조 위치 중 하나에 약간의 "나쁜 정수"를 전달하고,

OracleCmd.Parameters.AddWithValue(kvp.Key, int.Parse(kvp.Value)); 

내가 생각을 제거

OracleCmd.Prepare(); 

또 다른 이유는 무엇입니까?

public OracleDataReader ExecuteQuery(String query, 
            Dictionary<string,string> Parameters, 
            OracleConnection oracleCnn) 

실행 전에 연결 문자열을 전달하고 연결을 엽니 다. 적절한 사용 CommandBehavior

MSDN : 명령이 실행될 때 연관된 DataReader 개체가 닫힐 때 위해 CommandBehavior.CloseConnection, 관련 연결 객체가 폐쇄된다.

+0

쿼리가 가끔씩 작동하기 때문에 매개 변수에 문제가 없습니다. 어쨌든 시도해 보았고 같은 결과를 얻었습니다 (Prepare 문 제거도 시도했습니다.) 연결 다른 환경에 대한 다른 연결 문자열을 포함하는 사용자 지정 연결 개체가 있고 매개 변수를 기반으로 적절한 연결을 열었 기 때문에 전달되고 있습니다. 연결은 열리고 코드 조각 앞뒤에 제대로 닫힙니다. – user3255067

+0

@ user3255067 어떤 코드 줄에서 오류가 발생합니까? –

+0

문제를 찾기 위해 관리했는데 실제로 게시 한 스 니펫의 바깥쪽에 있었고 논리가있었습니다 오류, 정수 대신 매개 변수로 때로는 문자열을 보내는 것이 좋습니다, 감사합니다. – user3255067