在 ASP.net 中运行时调用存储过程

Posted

技术标签:

【中文标题】在 ASP.net 中运行时调用存储过程【英文标题】:Calling Stored Procedure at run time in ASP.net 【发布时间】:2016-09-22 03:40:08 【问题描述】:

根据我的报告需要,我在 SQL Server 中创建了各种存储过程。我想创建一个 API,它将存储过程的名称作为输入读取并返回从存储过程返回的结果数组。

需要注意的是,同一个方法会调用各种存储过程,并将一种 JSON 格式的动态匿名对象数组返回到我的 UI。

解决方案是否可以使用实体框架。不使用 ADO.net 连接机制?

意图:每次需要新报告时,我都不需要为我的软件制作新版本。我将在后端创建存储过程,并将新存储过程的名称添加到我的 API 将读取的某个表中。

【问题讨论】:

实体框架也使用 ado.net。那么你要求不使用 ado.net 的理由是什么? 我想坚持当前的 EF6,而不是通过编写所有自定义核心数据库连接类来使用 ADO.net 连接/断开连接架构。抱歉没说清楚!!! 到目前为止,我在 sql server 中生成了存储过程,当我更新我的 asp.net 应用程序时,EF 将根据存储过程的返回类型生成类,并在上下文类中添加类似的方法"public virtual ObjectResult StoredProcName(parameters if any) //calls ExecuteFunction 方法传递存储过程名称 ------ 我想要一个可以调用所有存储过程并返回类似 List 的新通用方法 【参考方案1】:

这可以通过SqlDataAdapter 对象轻松获得。但是,据我所知,您不能使用实体框架来做到这一点,只需直接 SqlConnection 管理即可。

SqlDataAdapter 有a nice example 这样做:

private static DataSet SelectRows(DataSet dataset, string connectionString,string queryString) 

    using (SqlConnection connection = new SqlConnection(connectionString))
    
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(queryString, connection);
        adapter.Fill(dataset);
        return dataset;
    

生成的 DataSet 将有一个(或多个,如果 sproc 返回更多)DataTable 将包含执行结果。

由您决定以某种方式显示或处理它。

【讨论】:

以上是关于在 ASP.net 中运行时调用存储过程的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ASP.NET 调用具有多个输入值的 MySQL 存储过程

asp.net调用mysql存储过程

来自 Oracle 存储过程的 ASP.NET 数据集

从 ASP.NET 调用 Oracle 存储过程时,无法将“System.Int32[]”类型的对象转换为“System.IConvertible”类型

ODBC调用存储过程

Asp.net(C#) 获取 执行sql server 语句/存储过程后的 多个返回值?