OracleCommand.BindByName = True 到底是什么意思?

ssu*_*s76 3 vb.net oracle

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)

Wer*_*eit 7

与之相反的cmd.BindByName = True是“按位置绑定”

您添加参数pcomments,pwidpactionby。设置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 中出现的顺序添加参数。