繁体   English   中英

Oracle 托管数据访问:抛出的值不够 c#

[英]Oracle managed data access: throws not enough values c#

虽然我找到了很多相同问题的答案,但没有一个解决了我的问题,所以我发布了这个问题。 在尝试使用 c# 中的Oracle.ManagedDataAccess将数据插入到 Oracle DB 时,我得到not enough values异常not enough values

在我的代码下面

string cmdQuery = string.Format("INSERT INTO HKSTF087.FREIGHTCHARGES" +
"(QTM_ID,TITLECODE,SERVICETYPE,FREIGHTCHARGERATE,FREIGHTCHARGETYPE,FREIGHTCHARGETARRIFCODE," +
"ORIGINID,FREIGHTCALCULATIONTYPE,EFFECTIVEFROMDATE,EFFECTIVETHRUDATE,CREATEDBY,CREATEDDATETIME,UPDATEDBY,UPDATEDDATETIME)" +
"VALUES(:QTM_ID,:TITLECODE,:SERVICETYPE,:FREIGHTCHARGERATE,:FREIGHTCHARGETYPE,:FREIGHTCHARGETARRIFCODE" +
":ORIGINID,:FREIGHTCALCULATIONTYPE,:EFFECTIVEFROMDATE,:EFFECTIVETHRUDATE,:CREATEDBY,:CREATEDDATETIME,:UPDATEDBY,:UPDATEDDATETIME)");

OracleParameter[] parameters = new OracleParameter[]
{
    new OracleParameter("QTM_ID",OracleDbType.Int32,origin.OriginId, ParameterDirection.Input),
    new OracleParameter("TITLECODE", OracleDbType.Varchar2, origin.TitleCode.Trim(), ParameterDirection.Input ),
    new OracleParameter("SERVICETYPE", OracleDbType.Varchar2, origin.ServiceType.Trim(), ParameterDirection.Input ),
    new OracleParameter("FREIGHTCHARGERATE", OracleDbType.Decimal, origin.FreightChargeRate, ParameterDirection.Input ),
    new OracleParameter("FREIGHTCHARGETYPE", OracleDbType.Varchar2, origin.FreightChargeRateType, ParameterDirection.Input ),
    new OracleParameter("FREIGHTCHARGETARRIFCODE", OracleDbType.Varchar2, origin.FreightChargeTariffCode, ParameterDirection.Input ),
    new OracleParameter("ORIGINID", OracleDbType.Varchar2, origin.OriginId.ToString(), ParameterDirection.Input ),
    new OracleParameter("FREIGHTCALCULATIONTYPE", OracleDbType.Varchar2, origin.FreightCalculationType, ParameterDirection.Input ),
    new OracleParameter("EFFECTIVEFROMDATE", OracleDbType.Date, effectiveFromDate, ParameterDirection.Input ),
    new OracleParameter("EFFECTIVETHRUDATE", OracleDbType.Date, "12/31/2099", ParameterDirection.Input ),
    new OracleParameter("CREATEDBY", OracleDbType.Varchar2, "system", ParameterDirection.Input ),
    new OracleParameter("CREATEDDATETIME", OracleDbType.Date, createdDate, ParameterDirection.Input ),
    new OracleParameter("UPDATEDBY", OracleDbType.Varchar2, null, ParameterDirection.Input ),
    new OracleParameter("UPDATEDDATETIME", OracleDbType.Date, null, ParameterDirection.Input )
};
//other code 
cmd.ExecuteNonQuery();

cmd.ExecuteNonQuery(); 抛出异常ORA-00947: not enough values但据我所知,所有参数都很好,也许我看不到问题的原因。 我也对另一个表做了类似的事情,并且确实将数据插入到表中。

"VALUES(:QTM_ID,:TITLECODE,:SERVICETYPE,:FREIGHTCHARGERATE,:FREIGHTCHARGETYPE,:FREIGHTCHARGETARRIFCODE" +
":ORIGINID,:FREIGHTCALCULATIONTYPE,:EFFECTIVEFROMDATE,:EFFECTIVETHRUDATE,:CREATEDBY,:CREATEDDATETIME,:UPDATEDBY,:UPDATEDDATETIME)");

我注意到在“FREIGHTCHARGETARRIFCODE”之后缺少逗号,这可能会在 oracle 上执行。

此外,自从我使用 ODP 以来已经有一段时间了,但我认为使用null而不是DbNull.Value可能会绊倒它并修剪这些参数而不是包含它们。 (编辑:此外,为 oracle 日期抛出字符串可能是也可能不是问题。)

所有这些还假设您将参数添加到省略代码中的命令中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM