ASP.NET SqlDataSource で ORA-01036

GridViewのデータソースに、SqlDataSourceを利用してUpadateしてたけど、
いつのまにかOra-01036が発生するように・・・
一日はまりましたが、ようやく解決。

GridViewのEditItemTemplateにあたらしく項目を増やしてたんだけど、
値をもってくるのをBind(変数名)ってやってた。
普通はこの値を連動してDBへUpdateするから良いけど、
RowDataBoundイベンドで値を変更できなくしたりするように変更不可時は読み取り専用のフィールドを作成してた。
この読取専用フィールドまでBind(変数名)で記述すると、UpdateCommandのSQLに読取専用フィールドの変数名を書かないとならない。かかなければOra-01036エラー。
BindではなくてEval(変数名)って記述することで解決。

長かった・・・

追記
Ora-01036エラーが出るパターンとして、
Sqlの中に書いているバインド変数(:変数名)と、select palametersやInsert Parametersは合っているけど、HTMLの中のBind変数に余計なものが多いとか、Selectにしか使っていないものをUpdate時にBindを使ってしまっていることが多い。
項目数が多くなると、どうしても整理しづらいけど、うまい解決方法がわからない・・
エラーの時は、Sqlのバインド変数とPalametersの定義、HTMLのBindで定義されている変数をエディタにコピーして一つづつ比較していくのが一番早いかも・・

0 コメント:

コメントを投稿