Oracle.ManagedDataAccess.Client 并使用 addwithvalue / DBNull 添加参数
Oracle.ManagedDataAccess.Client and add parameter with addwithvalue / DBNull
这是我的查询和参数列表,我收到了消息 "Not All Variable bound"
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 和产品时我得到了消息 "Not All Variable bound"
你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)
不知道参数名是不是@
是permitted/required。那么你应该删除 ToShortDateString
。参数声明为 OracleDbType.Date
,因此只需提供 DateTime
值,您不必考虑任何格式主题 - 这是使用绑定参数而不是将值作为字符串的主要好处。
这是我的查询和参数列表,我收到了消息 "Not All Variable bound"
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 和产品时我得到了消息 "Not All Variable bound"
你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)
不知道参数名是不是@
是permitted/required。那么你应该删除 ToShortDateString
。参数声明为 OracleDbType.Date
,因此只需提供 DateTime
值,您不必考虑任何格式主题 - 这是使用绑定参数而不是将值作为字符串的主要好处。