【问题标题】:Omit named parameters from OleDbCommand [closed]从 OleDbCommand 中省略命名参数 [关闭]
【发布时间】:2013-07-15 11:52:45
【问题描述】:

我有一个简单的存储过程,它需要 6 个参数。假设它们是@a, @b, @c, @d, @e, @f,它们都是可选的,默认值为null

我需要知道如何使用这些参数中的一些 来调用存储过程。我知道一般步骤:

  1. 定义一个连接并打开它。

  2. 定义一个命令对象

  3. 向命令对象添加参数。

  4. 执行命令。

现在对于每个@a, @b, @c, @d, @e, @f,我使用Parameters.Add() 添加该参数。

问题是:如果我只想用@a@f 调用存储过程,我还需要Add() 其他参数吗?或者如果我只添加 2 个参数,存储过程如何知道我提供了哪些参数?

【问题讨论】:

  • “如果我想只用@a 和@f 调用存储过程怎么办” - 试试看?
  • @CodeCaster,请不要假设每个提出问题的人手头都有无限的时间。我正在调试生产环境中的一个复杂错误,它可能有十几个原因。我没有时间在我这边设置测试并测试每个场景。
  • “我没有时间在我这边设置测试并测试每个场景。” - 所以从技术上讲,你正在外包你的调试。聪明。
  • Stack Overflow 不是一个论坛,它是一个问答网站。有区别。
  • OP承认自己懒得解决自己,宁愿让别人为他努力工作

标签: c# sql sql-server vb.net oledb


【解决方案1】:

问题是:如果我想只用@a 和@f 调用存储过程怎么办,

只要其他是可选的 SP 就会执行,不会有任何错误。

在这种情况下,我是否还需要添加其他参数 (b,c,d,e)?

不,你没有。

如果我只添加 2 个参数,存储过程如何知道顺序?

顺序在这里并不重要。参数名称是。它必须与 SP 声明中的相匹配。

【讨论】:

  • 好的,如果我只添加@a 和@d。存储过程如何知道我已经通过了这两个?它是否会查看为.NET 传递的实际参数名称以将其与它自己的匹配?例如“@a”到@a?
  • 是的,这正是它的工作原理。
  • @Joe from documentation:"当使用带有 SqlCommand 的参数执行 SQL Server 存储过程时,添加到 Parameters 集合中的参数名称必须与存储过程中的参数标记。”
  • 你确定订单不重要吗?我有 2 行: .Add(New OleDbParameter("@providerId", OleDbType.Integer, 4, .... .Add(New OleDbParameter("@personid", OleDbType.Integer, 4, ..... 如果我更改此顺序 存储过程得到错误的值。
  • 也就是说在我的测试中 PerosnID 和 ProviderID 参数应该完全按照存储过程中定义的顺序添加。
【解决方案2】:

既然你说所有参数都是可选的(允许为空);因此,即使您在没有任何参数的情况下调用 SP,它也应该可以正常运行。

【讨论】:

    【解决方案3】:

    如果您在 proc 中将参数定义为可为空,则运行它不会有任何问题。

    与其他人一样,重要的部分是您将参数命名为过程中的名称

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多