NET 应用程序并尝试更新数据库表。下面的更新查询会起作用吗?如果我设置 BindByName = True .NET 是否也会将 null 和 SYSDATE 视为参数?PS这是缩短的查询,实际查询有点复杂,所以在我尝试之前需要一些确认
cmd.Parameters.Clear()
cmd.CommandText = "UPDATE TBL_xxx_xxx SET NEXT=null, ACTIONDATE=SYSDATE, comments=:pcomments, STATUS=11 WHERE ACTIONDATE IS NULL AND WFID=:pwid AND ACTIONBY=:pactionby"
cmd.CommandType = CommandType.Text
cmd.BindByName = True
cmd.Parameters.Add(New OracleParameter(":pcomments", OracleDbType.Varchar2)).Value = somevalue
cmd.Parameters.Add(New OracleParameter(":pwid", OracleDbType.Int64)).Value = somevalue
cmd.Parameters.Add(New OracleParameter(":pactionby", OracleDbType.Varchar2)).Value = somevalue
cmd.ExecuteQuery()
Run Code Online (Sandbox Code Playgroud)
与之相反的cmd.BindByName = True是“按位置绑定”
您添加参数pcomments,pwid和pactionby。设置cmd.BindByName = True后,您可以按任何顺序添加它们。
所以,在你的情况下,这个也应该有效:
cmd.Parameters.Add(New OracleParameter(":pwid", OracleDbType.Int64)).Value = somevalue
cmd.Parameters.Add(New OracleParameter(":pactionby", OracleDbType.Varchar2)).Value = somevalue
cmd.Parameters.Add(New OracleParameter(":pcomments", OracleDbType.Varchar2)).Value = somevalue
Run Code Online (Sandbox Code Playgroud)
如果您设置了cmd.BindByName = False(这是默认设置),那么您必须按照它们在 CommandText 中出现的顺序添加参数。