OleDbCommand 参数顺序和优先级:期望不一致的情况
使用 OleDbCommand 构造查询时,确保参数顺序准确至关重要遵循 SQL 语句中的顺序。一个常见的误解是假设命名参数消除了这一要求。然而,正如深入调试会话所揭示的那样,当 CommandType 设置为 Text 时,OleDbCommand 缺乏对命名参数的支持。
在给定的示例中:
SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin
参数添加在顺序如下:
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut;
但是没有返回结果,说明不一致。对参数重新排序以匹配 SQL 语句后,查询将成功执行:
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin;
这与 http://msdn.microsoft.com/en-us/library/system.data 上的文档一致。 oledb.oledbcommand.parameters.aspx,它明确指出 OleDbCommand 不支持文本模式下 SQL 语句的命名参数。相反,必须使用问号 (?) 占位符,并且集合中 OleDbParameter 对象的顺序必须严格对应于它们在命令文本中的位置。
以上是当 CommandType 为 Text 时,OleDbCommand 参数顺序重要吗?的详细内容。更多信息请关注PHP中文网其他相关文章!