如何从C#中的存储过程中获取所需的参数

时间:2014-12-18 02:44:39

标签: c# sql .net sql-server sql-server-2008

当我们尝试执行存储过程而不向其发送必需参数值时,会出现如下错误。

enter image description here

我想知道,有没有办法有问题地捕获给定存储过程的所有参数?

例如:Parr [] string = GetSpParameters(" StoredProcedureName); //我需要开发" GetSpParameters"功能

感谢。

2 个答案:

答案 0 :(得分:4)

在SQL Server术语中,必需参数是任何没有默认值的参数,例如:

CREATE PROCEDURE Foo
(
  @Required INT,
  @NotRequired INT = NULL
)

在这种情况下,您可以调用不带@NotRequired参数的过程,但无法调用该过程而不使用{{1一个 - 你会在你的问题中得到错误。

您可以在已设置的@Required对象上使用SqlCommandBuilder.DeriveParameters来填充SqlCommand集合,但这不会告诉您可选参数和必需参数之间的区别。您可以假设所有存储过程参数都是必需的,但这是一个糟糕的主意。存储过程通常允许您传递各种参数组合,并且行为恰当。例如,"搜索"存储过程可能需要大量参数,但只需要您指定您真正想要搜索的参数;或者存储过程可能具有某个参数的默认值,并且只有在您想要更改行为时才希望指定显式值。

要实际区分,您需要使用SQL Server SMO API。这应该作为SQL Server客户端工具设置的一部分安装,您需要添加对多个程序集的引用:ParametersMicrosoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.Management.Sdk

从那里开始,基本的想法是:

Microsoft.SqlServer.Smo

您可以在this answerthis question以及this MSDN article中查看更多信息。特别是,第二个问题是通过告诉SMO不要加载一些你不会关心的信息来讨论加快这一过程的方法。

答案 1 :(得分:3)

您可以使用SqlCommandBuilder.DeriveParameters方法填充指定SqlCommand对象的Parameters集合。