您还没有设法将日期放入 SQL 查询中。您收到错误,因为 Oracle 无法将字符串+ d1 +
转换为表单的日期mm/dd/yyyy
。我在 SQL*Plus 中得到完全相同的错误:
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 注入的风险(强制性XKCD 漫画链接)。
相反,我建议您使用绑定参数在 SQL 查询中设置日期。下面的示例代码使用名为的绑定参数p_run_date
将日期传递给d1
查询,并将查询返回的电话名称写入Console.WriteLine
.
我在 C# 中编写了代码来执行此操作,对其进行测试以验证它是否符合我的预期,然后尝试将其转换为 VB.NET。我还没有测试过这个 VB.NET 代码,所以在转换过程中可能会出现一两个(希望是轻微的)错误:
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