【发布时间】:2014-02-14 18:48:03
【问题描述】:
我正在尝试更新 Oracle 数据库中的表。此带有硬编码状态代码的代码可以工作并更新记录:
public WorkRates UpdateRecord(int id, string stateCode)
{
var sql = "update work_rates set state_code = 'WA' where id = :id";
var db = Db.Load(sql);
db.AddParameter(":id", id);
db.DoExecute();
return null;
}
当我把它改成这样时:
public WorkRates UpdateRecord(int id, string stateCode)
{
var sql = "update work_rates set state_code = :stateCode where id = :id";
var db = Db.Load(sql);
db.AddParameter(":id", id);
db.AddParameter(":stateCode", stateCode);
db.DoExecute();
return null;
}
...它抛出异常“ORA-01036:非法变量名称/编号”。函数 public WorkRates UpdateRecord(int id, string stateCode) 确实获得了 stateCode ('WA') 的正确值。任何帮助表示赞赏!
【问题讨论】:
-
如果你把 :stateCode addParameter 放在 id addParameter 之前会起作用吗?
-
@BrianMcGinity - 是的,它成功了!对我来说,为什么改变位置可以解决它没有意义......
-
出于某种原因,Oracle 喜欢按照它们在 sql 语句中出现的顺序来了解绑定变量。就好像 Oracle 是按位置绑定的。我在存储过程中编写动态sql时遇到了同样的问题。
-
我会写这个作为答案,以防有人搜索同样的问题......