更新Oracle数据库会引发非法变量名称/数字异常

时间:2014-02-14 18:48:03

标签: c# oracle exception

我正在尝试更新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')获取了正确的值。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

撤销订单修复它:

db.AddParameter(":stateCode", stateCode);
db.AddParameter(":id", id);

出于某种原因,Oracle喜欢按照它们在sql语句中出现的顺序来了解绑定变量。就像Oracle按位置绑定一样。在存储过程中编写动态sql时遇到了同样的问题。