gpt4 book ai didi

c# - 使用 Entity Framework 从存储过程中获取数据

转载 作者:IT王子 更新时间:2023-10-29 04:08:12 25 4
gpt4 key购买 nike

我正在尝试使用从数据库上下文对象(使用 Entity Framework 6.1.1)调用的动态 SQL 存储过程获取表的内容,以便填充 GridView 控件。我无法检索数据。

这是存储过程。这是一个关于存储过程中 SQL 注入(inject)的学生演示,所以我知道这是可注入(inject)的,没问题。

ALTER PROCEDURE dbo.SearchProducts
@SearchTerm VARCHAR(max)
AS
BEGIN
DECLARE @query VARCHAR(max)
SET @query = 'SELECT * FROM dbo.Products WHERE Name LIKE ''%' + @SearchTerm + '%'''
EXEC(@query)
END

然后我用来执行存储过程的 C# 代码是:

var db = new MyEntities();
var TEST_SEARCH_TERM = "product";
var result = db.SearchProducts(TEST_SEARCH_TERM);

MyGridView.DataSource = result;
MyGridView.DataBind();

执行时,在 Visual Studio 的数据库资源管理器中,存储过程运行良好。但是当在运行的 ASP.NET 应用程序中执行时,我在 DataBind() 方法中得到一个异常,因为 result 返回 -1 而不是IEnumerable DataSet 包含存储过程的 SELECT 生成的对象。

如何检索数据并填充我的 GridView

最佳答案

使用以下步骤解决此问题:

  1. 您需要将存储过程作为函数导入。右键单击实体模型的工作区并选择 Add -> Function Import
  2. 在“添加函数导入”对话框中,输入您希望在模型中引用存储过程的名称,例如 Search_Products,从下拉列表中选择您的过程,然后选择返回值程序的名称是 Entities 并从下拉列表中选择 Products
  3. 然后在后面的代码中:

    var db = new MyEntities();
    var TEST_SEARCH_TERM = "product";
    var result = db.Search_Products(TEST_SEARCH_TERM);//Search_Products is the name that you specified in Function Import dialog

    MyGridView.DataSource = result;
    MyGridView.DataBind();

结果得到 -1 的原因是 Entity Framework 不支持开箱即用的存储过程返回值。我认为对存储过程返回值的支持取决于 Entity Framework 的版本。此外,Entity Framework 没有丰富的存储过程支持,因为它是 ORM,而不是 SQL 的替代品。

关于c# - 使用 Entity Framework 从存储过程中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32140774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com