mak*_*mak 32 c# sql-server asp.net stored-procedures entity-framework
我试图获取内容一个表,其中包含从数据库上下文对象调用的动态SQL存储过程(使用Entity Framework 6.1.1),以便填充GridView控件.我无法检索数据.
这是存储过程.这是一个关于存储过程中SQL注入的学生演示,所以我知道这是可注入的,它很好.
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
Run Code Online (Sandbox Code Playgroud)
然后我用来执行存储过程的C#代码是:
var db = new MyEntities();
var TEST_SEARCH_TERM = "product";
var result = db.SearchProducts(TEST_SEARCH_TERM);
MyGridView.DataSource = result;
MyGridView.DataBind();
Run Code Online (Sandbox Code Playgroud)
执行时,在Visual Studio的数据库资源管理器中,存储过程正常工作.但是当在运行的ASP.NET应用程序中执行时,我在DataBind()方法中得到一个异常,因为result返回-1而不是IEnumerable DataSet包含由存储过程的SELECT产生的对象.
如何检索数据并填充我的数据GridView?
Sal*_*ari 30
使用以下步骤解决此问题:
Add -> Function Import.Search_Products,从下拉列表中选择您的过程,然后选择要返回的过程值,并从下拉列表中进行Entities选择Products.名单.然后在代码背后:
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();
Run Code Online (Sandbox Code Playgroud)您获得-1结果的原因是实体框架不能支持开箱即用的存储过程返回值.我认为对存储过程返回值的支持取决于Entity框架的版本.实体框架也没有丰富的存储过程支持,因为它是一个ORM,而不是SQL替代品.
| 归档时间: |
|
| 查看次数: |
34040 次 |
| 最近记录: |