-1

这是我的查询和参数列表,我得到了消息“并非所有变量绑定”

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 和产品时,我得到了消息“不是所有变量绑定”

4

1 回答 1

1

你的 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值,您不必考虑任何格式主题 - 这是使用绑定参数而不是将值作为字符串放置的主要好处。

于 2018-11-12T12:31:20.887 回答