2017-10-21 45 views
1

雖然我發現了很多同一個問題的答案,但是沒有解決我的問題,所以我發佈了這個問題。我在嘗試使用c#中的Oracle.ManagedDataAccess將數據插入到Oracle DB時遇到了not enough values異常。Oracle管理的數據訪問:拋出的值不夠c#

下面我的代碼

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但據我可以看到所有的參數都是蠻好的,也許我不能看到問題的原因。我也用另一個表做過類似的事情,並且向表中插入數據。

回答

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

我注意到'FREIGHTCHARGETARRIFCODE'後面沒有逗號,可能會在oracle上做。

另外,自從我使用了ODP之後,我有一段時間了,但我認爲使用null而不是DbNull.Value可能會使它跳動並修剪這些參數,而不是包含它們。 (編輯:另外拋出一個字符串的oracle日期可能會或可能不會成爲問題)。

所有這一切都假設您將參數添加到消息中的命令中。

相關問題