2013-03-20 2 views
2

내가하려는 것은 두 날짜 사이에 쿼리를 실행하는 것이며 날짜는 매개 변수에서 가져온 것입니다.Oracle 쿼리에 날짜 매개 변수 추가

아래 코드에서 한 매개 변수를 넣고 두 번째 날짜를 예제 목적으로 고정 시켰습니다.

코드/쿼리는 여기를 붙여 가지 긴하지만, 여기에 짧은 버전입니다 :

OracleParameter fromDateParameter = new OracleParameter(); 
fromDateParameter.OracleDbType = OracleDbType.Varchar2; 
fromDateParameter.Value = "'3/06/2013 20:00:00'"; 

this.oracleDataAdapter4.SelectCommand = new OracleCommand(" 
    SELECT DISTINCT (LOG.RID) FROM LOG WHERE LOG.TIMESTAMP 
    BETWEEN TO_DATE(:fromDateParameter, 'MM/DD/YYYY hh24:mi:ss ') 
    AND TO_DATE('3/06/2013 23:59:00', 'MM/DD/YYYY hh24:mi:ss '))", 
    oracleConnection4); 

oracleDataAdapter4.SelectCommand.Parameters.Add(fromDateParameter);   
this.oracleDataAdapter4.Fill(event11); 

그리고 나는이 메시지를 가지고 :

ORA-01858를 : 비 숫자가 일 때 숫자가 발견되었습니다.

매개 변수없이 동일한 쿼리를 수행했는데 제대로 작동합니다.

감사합니다.

+0

WHERE = LOG.TIMESTAMP ... 그건 괜찮습니까? 그 사이에 LOG.TIMESTAMP ... –

+0

과 같은 것이 좋을 것입니다. – BrOSs

+0

OK, 방정식에서 매개 변수를 가져옵니다. SELECT DISTINCT (LOG.RID) from LOG WHERE = LOG.TIMESTAMP TO_DATE ('3/06/2013 23:59:00', 'MM/DD/YYYY hh24 : mi : ss ') TO_DATE ('3/06/2013 23:59:00 ','MM/DD/YYYY hh24 : mi : ss ') 작동합니까? –

답변

3

나는 Varchar2 Datatype을 사용하여이를 수행 할 방법을 찾지 못했습니다. 그래서, 나는 Date Datatype을 사용하여 답을주고있다.

if (dateTo.Minute > 30) 
    minToInt = 30; 
else 
    minToInt = 00; 

dateFrom = DateTime.Now; 
dateTo = DateTime.Now;  

DateTime dateFrom = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, dateFrom.Hour, 00, 00); 
DateTime dateTo = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, dateTo.Hour, minToInt, 00); 

////////FROM DATE///////// 
OracleParameter fromDateParameter = new OracleParameter(); 
fromDateParameter.OracleDbType = OracleDbType.Date; 
fromDateParameter.Value = dateFrom; 

////////TO DATE///////// 
OracleParameter toDateParameter = new OracleParameter(); 
toDateParameter.OracleDbType = OracleDbType.Date; 
toDateParameter.Value = dateTo; 


this.oracleDataAdapter4.SelectCommand = new OracleCommand(" 
    SELECT DISTINCT (LOG.RID) FROM LOG WHERE LOG.TIMESTAMP 
    BETWEEN :fromDateParameter 
    AND :fromDateParameter)", oracleConnection4); 

oracleDataAdapter4.SelectCommand.Parameters.Add(fromDateParameter);   
oracleDataAdapter4.SelectCommand.Parameters.Add(toDateParameter); 
this.oracleDataAdapter4.Fill(event11); 

은 그냥 내 쿼리하기위한 목적의 경우/다른 분의 검증과 혼동하지 않습니다.

+1

Mister, 두 번째 매개 변수는 "... AND : toDateParameter"가 아니어야합니다. ",? – marcolino