Oracle.ManagedDataAccess.Client и добавьте параметр с помощью addwithvalue / DBNull - PullRequest
0 голосов
/ 12 ноября 2018

это мой запрос и список параметров. Я получил сообщение "Не все переменные связаны"

Dim cmd As New OracleCommand("select POLICY_REFER, ....

from   POLICY_MASTER
where  ISSUE_DATE BETWEEN :DFrom AND :DTo 
                           And    (CLIENT_NAME = :client or :client is null)  
                           and    (POLICY_PRODUCT = :product or :product is null)
                           and DOC_STATUS = 'Parked'", sgcnn)

cmd.Parameters.Add("@DFrom", OracleDbType.Date).Value = DtpFrom.Value.ToShortDateString
            cmd.Parameters.Add("@DTo", OracleDbType.Date).Value = DtpTo.Value.ToShortDateString
            cmd.Parameters.Add("@Product", OracleDbType.Varchar2).Value = CmbProduct.Text
            cmd.Parameters.Add("@Client", OracleDbType.Varchar2).Value = CmbClient.Text

если я использовал только client_name в запросе в списке параметров, то это работает, но когда я использовал client_name и product, я получил сообщение "Не все переменные связаны"

1 Ответ

0 голосов
/ 12 ноября 2018

Ваша строка SQL имеет шесть параметров

**:DFrom** AND **:DTo** 
And    (CLIENT_NAME = **:client** or **:client** is null)  
and    (POLICY_PRODUCT = **:product** or **:product** 

Таким образом, вы должны указать шесть параметров:

cmd.Parameters.Add("DFrom", OracleDbType.Date).Value = DtpFrom.Value
cmd.Parameters.Add("DTo", OracleDbType.Date).Value = DtpTo.Value
cmd.Parameters.Add("Client", OracleDbType.Varchar2).Value = IIf(String.IsNullOrEmpty(CmbClient.Text), DBNull.Value, CmbClient.Text)
cmd.Parameters.Add("Client", OracleDbType.Varchar2).Value = IIf(String.IsNullOrEmpty(CmbClient.Text), DBNull.Value, CmbClient.Text)
cmd.Parameters.Add("Product", OracleDbType.Varchar2).Value = IIf(String.IsNullOrEmpty(CmbProduct.Text), DBNull.Value, CmbProduct.Text)
cmd.Parameters.Add("Product", OracleDbType.Varchar2).Value = IIf(String.IsNullOrEmpty(CmbProduct.Text), DBNull.Value, CmbProduct.Text)

Я не знаю, разрешено / требуется ли @ для имени параметра. Тогда вы должны удалить ToShortDateString. Параметр объявлен как OracleDbType.Date, поэтому просто укажите значение DateTime, вам не нужно рассматривать какие-либо темы формата - это главное преимущество использования параметров связывания вместо того, чтобы помещать значения в виде строк.

...