2014-02-14 55 views
1

我試圖更新Oracle數據庫中的表。此代碼通過硬編碼狀態代碼作品和更新記錄:更新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')獲得了正確的值。任何幫助表示讚賞!

+0

不工作,如果你把id:addParameter之前的:stateCode addParameter? –

+0

@BrianMcGinity - 是的,它的工作!這對我來說沒有任何意義,爲什麼改變立場可以修復它...... – Kate

+0

由於某些原因,Oracle喜歡按照它們在sql語句中出現的順序知道綁定變量。就好像甲骨文是有約束力的。在存儲過程中編寫動態sql時遇到同樣的問題。 –

回答

0

反向排序固定它:

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

出於某種原因,甲骨文喜歡知道它們出現在SQL語句的順序綁定變量。就好像甲骨文是有約束力的。在存儲過程中編寫動態sql時遇到同樣的問題。

+0

它解決了這個問題。感謝您的幫助! – Kate

+1

只是想多次提到在存儲過程中編寫sql會更容易,因爲sql語句中的變量會自動變爲綁定變量。如果您需要執行復雜的數據庫操作,請考慮將其寫入plsql並從c#調用它。 –