OleDbCommand参数顺序和优先级

时间:2009-09-25 11:26:34

标签: c# ms-access ado.net oledb

我在过去40分钟内一直在调试此查询,问题显然是参数的顺序。

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;

当我按照它们在queury中出现的方式声明参数时,一切都很完美。

我认为命名参数是解决这个问题的第一步!我在这里错过了什么?

谢谢

3 个答案:

答案 0 :(得分:29)

根据http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx OleDbCommand不支持命名参数

  

当CommandType设置为Text时,OLE DB .NET提供程序不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?
  

因此,OleDbParameter对象添加到OleDbParameterCollection的顺序必须直接对应于命令文本中参数的问号占位符的位置。

所以参数的顺序很重要。

答案 1 :(得分:3)

如果我没记错的话,如果ADO.NET中的OleDbCommand与旧的ADO库/库(在VB6,VBA等中使用)的功能类似,则参数集合不会按名称定义参数,仅按集合中的位置。这似乎是您正在经历的行为。

答案 2 :(得分:0)

不是正面的,但看起来你的参数看起来并不像查询中的“@”对应的同一序列,也没有相同的命名值......

@id,
@dtDebut 
then
@dateTraitementFin