首页 / 知识
关于C#:如何从SQL Server中的存储过程中检索参数列表
2023-04-13 13:58:00

How can I retrieve a list of parameters from a stored procedure in SQL Server使用C#和System.Data.SqlClient,是否可以在实际执行之前检索属于SQL Server上存储过程的参数列表? 我有一个"多环境"方案,其中同一数据库架构有多个版本。 环境的示例可能是"开发","分段"和"生产"。"开发"将具有存储过程的一个版本,"分期"将具有另一个版本。 我要做的就是在传递参数值和调用存储过程之前,验证参数是否存在。 对我来说,避免该SqlException而不是必须捕获它是一个加号。 约书亚记 您需要SqlCommandBuilder.DeriveParameters(SqlCommand)方法。请注意,它需要额外的数据库往返行程,因此对性能的影响很大。您应该考虑缓存结果。 调用示例:
您可以使用SqlCommandBuilder.DeriveParameters()(请参阅SqlCommandBuilder.DeriveParameters-获取存储过程的参数信息-ADO.NET教程),或者这种方法不太理想。 尽管这并不是您所需要的,但这是一些示例代码,该示例代码使用SqlConnection.GetSchema()方法返回与数据库关联的所有存储过程,然后返回每个存储过程的所有参数名称和类型。下面的示例将其加载到变量中。请注意,这也将返回所有"系统"存储过程,这可能是不希望的。 史蒂夫
您可以使用SqlCommandBuilder对象,并调用DeriveParameters方法。 基本上,您需要向它传递一个命令,该命令被设置为调用存储的proc,它将命中数据库以发现参数,并在SqlCommand的Parameters属性中创建适当的参数 编辑:你们都太快了!
这句话满足了我的需要。 这是解决此问题的完整代码示例。
Mark具有DeriveParameters的最佳实现。正如他所说,请确保像本教程一样进行缓存。 但是,我认为这是解决数据库存储过程版本控制的原始问题的危险方法。如果要通过添加或删除参数来更改过程的签名,则应执行以下操作之一:
依靠DeriveParameters来验证您使用的sproc版本是错误的工具,恕我直言。 从几年前开始,我就一直将DeriveParameters与.NET 1.1和2.0结合使用,并且每次都像魅力一样。 现在,我正在使用.NET 3.5进行第一次分配,并且发现了一个令人震惊的丑闻:DeriveParameters使用SqlDbType" Variant"创建所有参数,而不是使用适当的SqlDbTypes。尝试使用数字参数执行SP时,这会创建SqlException,因为SQL Server 2005说不能将sql变量类型隐式转换为int(或smallint或数字)值。 我刚刚使用.NET CF 2.0和SQL Server 2000测试了相同的代码,并按预期工作,为每个参数分配了正确的SqlDbType。 我已经针对SQL Server 2005数据库测试了.NET 2.0应用程序,因此不是与SQL Server相关的问题,因此它必须与.NET 3.5相关。 有任何想法吗? 所有这些ADO.NET解决方案都在要求代码库代表您查询数据库的元数据。如果您无论如何都要受到性能的影响,也许您应该编写一些帮助函数来调用
或者甚至可以根据返回的参数列表生成参数。该技术将与MS SQL的多个版本一起工作,有时还会与其他ANSI SQL数据库一起工作。 |
最新内容
相关内容
在Python中使用带有列表和字符串文
在Python中使用带有列表和字符串文字的for循环,代码,数字,培训,之间,字符串,列表,语句,文字,奇数,这一点,现在看一下下面的代码,输出1到100之Python 中如何实现参数化测试?
Python 中如何实现参数化测试?,密码,数据,测试,业务,情况,预期,培训,系统,参数,方法,之前,我曾转过一个单元测试框架系列的文章,里面介绍了unitPython可执行文件和模块
Python可执行文件和模块,标准,培训,模块,文件,属性,上面,内容,变量,函数,源码,python源代码文件按照功能可以分为两种类型:用于执行的可执行程python unittest控制用例的执行顺
python unittest控制用例的执行顺序,名字,交易,培训,方法,顺序,测试,方式,功能,订单,接口,为什么要进行顺序控制呢?使用过testng的同学就知道python函数调用和参数传递
python函数调用和参数传递,位置,培训,函数,变量,参数,指针,例子,内存,整数,操作,定义过函数后,就可以在后面程序中使用这一函数printsquare_suPython生成表达式和列表解析
Python生成表达式和列表解析,工具,培训,列表,表达式,生成器,嵌套,计算所,元素,两个,动作,生成器表达式(Generatorexpression)和列表解析(ListPython在最短的序列参数终止时停止
Python在最短的序列参数终止时停止迭代,培训,序列,函数,版本,元素,参数,形式,以上,功能,指南,chain(p,q,...)迭代至序列p的最后一个元素后,从q使用Python执行系统命令方法
使用Python执行系统命令方法,系统,信息,培训,标准,命令,方法,模块,操作,终端,中文,Python是一款操作简单的编程语言,内置丰富的库,能够很容易的python 命名关键字参数
python 命名关键字参数,位置,参数,名字,培训,关键字,函数,后面,定义,方式,上面,对于关键字参数,函数的调用者可以传入任意不受限制的关键字参python 列表元素的删除
python 列表元素的删除,代码,数据,位置,连续,异常,首次,培训,元素,列表,空隙,使用del命令删除列表中的指定位置上的元素。>>>a_list=[3,5,7,9python 列表元素访问与计数
python 列表元素访问与计数,异常,首次,培训,列表,元素,下标,对象,方法,次数,以上,使用下标直接访问列表元素,如果指定下标不存在,则抛出异常。>python 列表排序
python 列表排序,培训,对象,列表,升序,逆序,方法,函数,原地,元素,降序,使用列表对象的sort()方法进行原地排序,支持多种不同的排序方法。>>>aL