2012-07-20 2 views
1

Я пишу код в vb.net .am, используя инструкцию select в команде oracle. когда я передаю значения аргументов через переменную am, получая ошибку.Передача аргументов в команде oracle с помощью vb.net

my code 
------ 
chk1 = TextBox1.Text 
d1 = Date.Parse(chk1) 


-------- 
-------- 
try 
    cn.Open() 

     cmd = New OracleCommand("select PHONE from reports.renewal_contact_t where run_date=to_date('+ d1 +','mm/dd/yyyy') and EXP_DATE =to_date('07/21/2012','mm/dd/yyyy')", cn) 

------------ 
ada.Fill(ds, "reports.renewal_contact_t ") 
end try 


eror(in ada.fill statement) 
----- 
ORA-01858: a non-numeric character was found where a numeric was expected 
+0

И какова будет эта ошибка, пожалуйста, укажите трассировку сообщения/стека. Кроме того, из вашего кода не кажется, что вы передаете параметр для d1. –

+0

Я упомянул свою ошибку – vps

ответ

3

Вам не удалось ввести дату в ваш 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 injection (обязательно XKCD comic link).

Вместо этого я рекомендую вам установить дату в 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 
-1

В vb вы можете попробовать:

cmd = New OracleCommand(
    "select PHONE from reports.renewal_contact_t where run_date=to_date('" & d1 & "','mm/dd/yyyy') and EXP_DATE =to_date('07/21/2012','mm/dd/yyyy')", cn) 

Это будет соедините вашу строку d1 с вашим выражением

 Смежные вопросы

  • Нет связанных вопросов^_^