代码之家  ›  专栏  ›  技术社区  ›  0xFF

OLEDB命令参数顺序和优先级

  •  16
  • 0xFF  · 技术社区  · 15 年前

    在过去的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 回复  |  直到 8 年前
        1
  •  29
  •   Arthur    15 年前

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

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

    SELECT * FROM Customers WHERE CustomerID = ?
    

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

    因此,参数的顺序很重要。

        2
  •  3
  •   Russ Cam    15 年前

    如果我记错了,如果 OleDbCommand 在ADO.NET函数中,与旧的ADO库/库(在VB6、VBA等中使用)类似,参数集合不按名称定义参数,只按集合中的位置定义参数。这似乎就是你正在经历的行为。

        3
  •  0
  •   DRapp    15 年前

    不是正数,但看起来您的参数添加的顺序不同,命名值也不同于查询的“@”对应项…

    @id,
    @dtDebut 
    then
    @dateTraitementFin