[英].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中传递字符串不会导致问题-虽然这是我唯一的猜测。
尝试将此行添加到开始代码中:
OracleCommand cmd1 = con.CreateCommand();
cmd1.BindByName = true;
cmd1.CommandType = CommandType.Text;
如果我还记得,如果未设置BindByName,则OracleCommand类将按提交顺序而不是按名称绑定查询中的参数。 因此,由于您多次使用SQL字符串中的某些绑定占位符,因此需要再次绑定它们-导致“未绑定所有变量”异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.