SQL 쿼리에 날짜를 입력하지 않아도됩니다. 오라클이 문자열 + d1 +
을 양식 mm/dd/yyyy
의 날짜로 변환 할 수 없기 때문에 오류가 발생합니다. 나는 * SQL에서 정확히 같은 오류가 플러스 :
SQL> select to_date('+ d1 +', 'mm/dd/yyyy') from dual;
select to_date('+ d1 +', 'mm/dd/yyyy') from dual
*
ERROR at line 1:
ORA-01858: a non-numeric character was found where a numeric was expected
가 작동하는 것처럼 보일 것이다 쿼리를 얻기 위해 SQL 문자열에 날짜를 연결할 수있는 방법입니다,하지만 난 당신을 보여 않을거야 . SQL injection (의무적 인 XKCD comic link)의 위험에 코드를 집어 넣기 때문에이 작업을하는 습관에 빠지기를 바랍니다.
대신 bind 매개 변수를 사용하여 SQL 쿼리에 날짜를 설정하는 것이 좋습니다. 아래 예제 코드에서는 p_run_date
이라는 바인드 매개 변수를 사용하여 d1
날짜를 쿼리에 전달하고 쿼리에서 반환 한 전화의 이름을 Console.WriteLine
에 씁니다.
C#에서이 작업을 수행하는 코드를 작성하고 예상했던대로 작동하는지 확인한 다음 VB.NET으로 변환하려고 시도했습니다. 나는이 VB.NET 코드를 테스트하지 않은, 잘 변환에 하나 또는 두 개의 (희망 약간) 오류가있을 수 있습니다 : 당신이 시도 할 수 vb
에서
Using OracleCommand cmd As New OracleCommand("select PHONE from reports.renewal_contact_t where run_date=:p_run_date and EXP_DATE =to_date('07/21/2012','mm/dd/yyyy')", cn)
cmd.Parameters.Add(New OracleParameter() { Direction = ParameterDirection.Input, ParameterName = "p_run_date", OracleDbType = OracleDbType.Date, Value = d1 })
Using OracleDataReader reader As cmd.ExecuteReader()
While reader.Read()
Console.WriteLine(reader.GetString(0))
End While
End Using
End Using
그리고 그 오류는 무엇입니까? 메시지/스택 추적을 제공해주십시오. 또한, 귀하의 코드에서 d1에 대한 매개 변수를 전달하는 것 같지 않습니다. –
나는 나의 오류에 대해 언급했다. – vps