【问题标题】:how to run stored procedure in Entity framework如何在实体框架中运行存储过程
【发布时间】:2017-05-29 09:15:52
【问题描述】:

我在数据库中有一个查询,它通过 Ajax 使用 Json 带来另一个查询作为响应。我已经创建了接受该查询并带来多个列的存储过程。

我不知道如何在实体框架中运行存储过程。

需要帮助。

方法:-

public ActionResult DropDownn(string query)
    {
        using (DynamicDBEntities db = new DynamicDBEntities())
        {
            //var dbQuery = db.Database.SqlQuery<Cust_mas>(query).ToList();
            //return Json(courseList, JsonRequestBehavior.AllowGet);
        }
    }

SP:-
更改过程 [dbo].[SP_DynamicCtrl]

@query nvarchar(1000) 
As
begin
execute sp_executesql @query;
end

【问题讨论】:

  • @DanielTshuva 它正在使用我不想使用的模型。我直接想在 json 中返回该数据并在表中打印它
  • 你的存储过程返回一个json?
  • @DanielTshuva no...... 实际上存储过程正在发送多个列,但我想以 JSON 形式返回,以便 ajax 调用可以执行它们。

标签: c# jquery asp.net-mvc entity-framework stored-procedures


【解决方案1】:

据我了解,您希望执行一个在多个表上运行的存储过程,然后将 Json 数据返回给 View。您实际上可以执行以下操作:

方法一:(使用ExecuteSqlCommand)

SqlParameter param1 = new SqlParameter("@query", query);        
var result = db.Database.ExecuteSqlCommand("SP_DynamicCtrl @query", 
                              param1);

方法 2:(在 SqlQuery 上使用对象类型)

SqlParameter param1 = new SqlParameter("@query", query);
Var result = db.Database.SqlQuery<Object>("exec SP_DynamicCtrl @query", param1);

方法 3:(更清洁的方法)

1.) 根据存储过程的返回参数创建一个模型,我们称之为YourType 类。 2.) 使用以下代码调用存储的程序:

SqlParameter param1 = new SqlParameter("@query", query);
Var result = db.Database.SqlQuery<YourType>("exec SP_DynamicCtrl @query", param1);

从上面的查询中得到结果后,您可以将其转换为 JSON,然后在控制器中返回:

return Json(result, JsonRequestBehavior.AllowGet); //Typecast the result as per your need

请根据需要修改代码。

【讨论】:

  • 我可以在 SqlQuery() 方法中传递我的查询参数吗.....因为我的 sp 正在接受参数并执行它。它也显示错误
  • 在我上面的例子中,@query 是存储过程的参数。使用上述代码后出现什么错误?
  • 它不接受函数...未知的“函数”
  • @sandeepgupta:我已经更新了答案。请查看并验证。
  • 1.显示结果 = -1 2. 显示: - SqlParameter 已包含在另一个 SqlParameterCollection 中。 3.不想用model我直接想用json结果生成表
【解决方案2】:

如果你已经在 edmx 中映射了它,试试这个

 public ActionResult DropDownn(string query)
    {
        using (DynamicDBEntities db = new DynamicDBEntities())
        {

       var result = context.SP_DynamicCtrl(query);
        return result.FirstOrDefault();
        }
    }

【讨论】:

  • 商店数据提供者返回的数据读取器没有足够的列用于请求的查询
  • 它在“var result = context.SP_DynamicCtrl(query);”中显示错误System.InvalidOperationException: '从物化 'System.Int64' 类型到 'System.String' 类型的指定转换无效。'
  • 尝试使用公共静态字符串
  • 结果返回铸造问题
猜你喜欢
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多