当我们尝试执行存储过程而不向其发送必需参数值时,会出现如下错误。
我想知道,有没有办法有问题地捕获给定存储过程的所有参数?
例如:Parr [] string = GetSpParameters(" StoredProcedureName); //我需要开发" GetSpParameters"功能
感谢。
答案 0 :(得分:4)
在SQL Server术语中,必需参数是任何没有默认值的参数,例如:
CREATE PROCEDURE Foo
(
@Required INT,
@NotRequired INT = NULL
)
在这种情况下,您可以调用不带@NotRequired
参数的过程,但无法调用该过程而不使用{{1一个 - 你会在你的问题中得到错误。
您可以在已设置的@Required
对象上使用SqlCommandBuilder.DeriveParameters
来填充SqlCommand
集合,但这不会告诉您可选参数和必需参数之间的区别。您可以假设所有存储过程参数都是必需的,但这是一个糟糕的主意。存储过程通常允许您传递各种参数组合,并且行为恰当。例如,"搜索"存储过程可能需要大量参数,但只需要您指定您真正想要搜索的参数;或者存储过程可能具有某个参数的默认值,并且只有在您想要更改行为时才希望指定显式值。
要实际区分,您需要使用SQL Server SMO API。这应该作为SQL Server客户端工具设置的一部分安装,您需要添加对多个程序集的引用:Parameters
,Microsoft.SqlServer.ConnectionInfo
和Microsoft.SqlServer.Management.Sdk
。
从那里开始,基本的想法是:
Microsoft.SqlServer.Smo
您可以在this answer和this question以及this MSDN article中查看更多信息。特别是,第二个问题是通过告诉SMO不要加载一些你不会关心的信息来讨论加快这一过程的方法。
答案 1 :(得分:3)
您可以使用SqlCommandBuilder.DeriveParameters
方法填充指定SqlCommand对象的Parameters集合。