通用调用存储过程从C#下载数据

时间:2015-06-02 09:22:17

标签: c# sql-server generics stored-procedures

我想基于一组用户选择和返回用户将下载的数据来调用多个存储过程。每个存储过程都有一组不同的参数列表和类型。这些参数将通过网页作为表单元素公开。 我的问题主要是有一个通用机制的其他想法,无论参数的类型如何,都可以从C#调用存储过程。

我目前正在考虑配置一个xml文件,该文件将定义如何调用存储过程,并根据参数类型列表动态解析输入并调用给定的存储过程。

我很乐意使用.Net框架中提供的任何其他机制来获得任何其他想法。我不确定是否有更好的方法。

非常感谢提前 B'/ P>

1 个答案:

答案 0 :(得分:1)

还有其他方法可以做到这一点,但我不太确定它们会更好。

一种方法是使用SqlCommandBuilder.DeriveParameters方法动态填充SqlCommand.Parameters

使用此方法的主要优点是,除了存储过程本身之外,您不需要将参数列表保留在其他位置,这使您的维护更加容易。此外,它使您的代码更短,更清洁。

缺点是它需要为每个存储过程调用数据库,这可能比解析XML文件慢一点。

请注意我链接到的DeriveParameters MSDN页面上的备注部分:

  

DeriveParameters 会覆盖SqlDbCommand的所有现有参数信息。
   DeriveParameters 需要额外调用数据库才能获取信息。如果事先知道参数信息,则通过明确设置信息来填充参数集合更有效   您只能将DeriveParameters与存储过程一起使用。您不能将DeriveParameters与扩展存储过程一起使用。您不能使用DeriveParameters使用任意Transact-SQL语句填充SqlParameterCollection,例如参数化的SELECT语句。

使用它的方法非常简单:

DatePicker

一旦您执行了此代码,cmd.Parameters将包含所有可供使用的参数,您只需为它们设置值即可。

我建议创建一个封装此代码并将SqlCommend作为参数的方法。此外,您可能希望创建一个方法,该方法将返回最适合每个参数的输入控件(例如SqlDBType.Date的{​​{1}},TextBox等的SqlDBType.Varchar