簡體   English   中英

.Net / C#-Oracle SQL並非所有變量都受限制-托管數據訪問

[英].Net/C# - Oracle SQL Not All Variables Bound - Managed Data Access

我相對不熟悉Oracle的SQL風格。 我不知道為什么會返回以下異常:

Oracle.ManagedDataAccess.Client.OracleException(0x80004005):ORA-01008:並非所有變量都已綁定

                    OracleCommand cmd1 = con.CreateCommand();
                    cmd1.CommandType = CommandType.Text;
                    cmd1.CommandText = @"MERGE INTO SECURITY_PRICES$V tgt USING (select * from DUAL) src ON (src.DTE = tgt.DTE AND src.SECURITY = tgt.SECURITY AND src.SOURCE = tgt.SOURCE) WHEN MATCHED THEN UPDATE SET tgt.TYPE = 'I', tgt.SOURCE = src.Source, tgt.CURRENCY = 'JMD' ,tgt.SECURITY = src.Security, tgt.LAST_PRICE = :Close, tgt.HIGH_PRICE = :High, tgt.LOW_PRICE = :Low, tgt.DTE = src.DTE, tgt.Volume = :Vol WHEN NOT MATCHED THEN INSERT (TYPE, SOURCE, CURRENCY, SECURITY, LAST_PRICE, HIGH_PRICE, LOW_PRICE, DTE, Volume) VALUES ('I', 'E', 'JMD', :insID,:Close,:High, :Low, :Time, :Vol)";


                    cmd1.Parameters.Add("insID", secid);
                    cmd1.Parameters.Add("Close", data.Close);
                    cmd1.Parameters.Add("High", data.High);
                    cmd1.Parameters.Add("Low", data.Low);
                    cmd1.Parameters.Add("Time", data.Time);
                    cmd1.Parameters.Add("Vol", data.Volume);

                    int suc = cmd1.ExecuteNonQuery();

我嘗試了以下方法。 將冒號(':')添加到parameters.add。 使用較少的變量,確保它沒有傳遞空參數。

這是數據。 它被解析為一個對象,每個屬性都是一個字符串。 oracle是否需要強類型化的參數? 在MS SQL Server中傳遞字符串不會導致問題-雖然這是我唯一的猜測。

  • insID:228IL
  • 低:0
  • 高0
  • 時間:2018-01-29T13:05:26
  • 卷:0
  • 結束:0

嘗試將此行添加到開始代碼中:

OracleCommand cmd1 = con.CreateCommand();
cmd1.BindByName = true;
cmd1.CommandType = CommandType.Text;

如果我還記得,如果未設置BindByName,則OracleCommand類將按提交順序而不是按名稱綁定查詢中的參數。 因此,由於您多次使用SQL字符串中的某些綁定占位符,因此需要再次綁定它們-導致“未綁定所有變量”異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM