我有以下更新语句在SQL Developer中正常工作:
UPDATE SDUSERS SET PWDATTEMPTS=PWDATTEMPTS+1 WHERE lower(UserName)='test';
现在,在我的VB.NET中,由于某种原因它不会更新数据库,它会产生错误ORA-01013:用户请求取消当前操作,错误代码:-2147467259
Dim sqlUpdateFailed As New OracleCommand("UPDATE " & oConnection.SCHEMA_NAME.ToUpper
& "SDUSERS SET PWDATTEMPTS=PWDATTEMPTS+1 WHERE lower(USERNAME)='" & sUsername & "'", conn)
sqlUpdateFailed.CommandTimeout = 20
sqlUpdateFailed.ExecuteNonQuery()
任何想法我可能做错了什么?
答案 0 :(得分:0)
最有可能的原因是,ORA-1013的原因是达到了查询执行超时。检查一下,尝试一些很大的超时值。
这样的更新应该快速,非常快地执行(我猜桌子很小,不是吗?)所以如果它挂起就意味着记录被锁定了。也许您将此记录更新为SQL Developer并忘记提交,可能还有其他内容。如果在更新语句之前执行SELECT * FROM SDUSERS WHERE lower(UserName) = :username FOR UPDATE NOWAIT
之类的操作,则可以检查它。
顺便说一句,您的来源为SQL Injection提供了出色的能力。