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

本文关键字:下载 数据 存储过程 调用 | 更新日期: 2023-09-27 17:52:56

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

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

我真的很高兴有任何其他的想法使用任何其他机制可用的。net框架。我不确定是否有更好的方法。

提前感谢b

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

还有其他方法,但我不确定它们是否更好。

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

使用这种方法的主要优点是,除了存储过程本身之外,您不需要将参数列表保存在其他地方,从而使维护工作容易得多。此外,它使您的代码更短,更干净。

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

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

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

使用方法很简单:

SqlCommand cmd;
Using(SqlConnection Con = new SqlConnection("ConnectionString")
{
    cmd = new SqlCommand("StoredProcedureName", Con);
    cmd.CommandType = CommandType.StoredProcedure;
    Con.Open();
    SqlCommandBuilder.DeriveParameters(cmd);
    Con.Close();
}

一旦你执行了这段代码,cmd。参数将包含所有准备使用的参数,您所要做的就是为它们设置值。

我建议创建一个方法来封装这段代码,并将sqlcommit作为参数获取。此外,您可能想要创建一个方法,该方法将返回最适合每个参数的输入控件(即DatePickerSqlDBType.Date, TextBoxSqlDBType.Varchar等)。