【问题标题】:Pass Unknown Number of Parameters to SQL Stored Procedure将未知数量的参数传递给 SQL 存储过程
【发布时间】:2026-02-23 19:45:01
【问题描述】:

在通过 vb.net 执行存储过程时,我还是个新手。但是,我想知道是否有人知道如何在我的数据库类中创建一个函数来接受 SP 名称和未知数量的参数及其相关值,以针对 SQL 数据库执行。

这将能够执行任何旨在使用我的类中的相同函数恢复数据表的存储过程。

任何帮助都会很棒。我知道有一个 SqlParamaterCollection 或者我可以使用参数数组吗?

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 您会提前知道参数的名称是什么,还是必须从数据库中找出来?
  • 我会知道存储过程的名称和所有参数。我的目标是拥有一个函数来执行我通过的任何程序。

标签: sql vb.net stored-procedures parameters


【解决方案1】:

您可以通过为您可能不会传入的参数添加默认值来完成此操作。

W3Schools 对此有很好的解释here

如果这不能回答您关于如何在 vb.net 中执行此操作的问题,有几种方法可以在代码中处理此问题。最直接的就是 if 语句。

if (there is a value to pass in then) then
     command.parameters.addwithvalue("@Parameter", your value)
endif

【讨论】:

  • 您好,首先感谢您抽出宝贵时间回复我。但是,我知道我可以创建一个 sql 连接并使用 addeith 值等添加参数,但我正在寻找一个可以传递两个参数的函数。第一个是存储过程名称,下一个是参数集合及其值。我希望我可以将这些传入并有代码通过使用名称参数来执行存储过程并传递参数集合。
  • 只有在存储过程中的所有参数都具有默认值并且传递给函数的参数集合具有每个参数的值时才能执行此操作。例如,如果您的存储过程中有 3 个参数,那么您的集合必须有 3 个项目,未使用的项目要么是 NOTHING,要么是 dbnull.value。我希望我已经正确理解了这个问题,如果这有帮助,我将编辑我的答案。
【解决方案2】:

这就是我正在做的事情:

Public Sub CallSproc(SprocName As String, Server As String, Database As String, Optional ParameterArray(,) As String = Nothing)

只需创建一个二维数组以传递给传递参数名称和值的子节点。我使用 ubound 将它们分开,这将告诉您数组中有多少个参数。

【讨论】:

    最近更新 更多