【问题标题】:Syntax error in mysql stored procedure calling from EF 6从 EF 6 调用 mysql 存储过程中的语法错误
【发布时间】:2016-05-31 11:57:36
【问题描述】:

我正在使用 Entity Framework 6 从 MVC 5 应用程序调用存储过程。它抛出此错误:

您的 SQL 语法有错误;检查对应的手册
您的 MySQL 服务器版本,以便在第 1 行的“rv_test_param 1”附近使用正确的语法

我的代码是:

var res = Context.Database.SqlQuery<string>("rv_test_param @id", new MySqlParameter("@id", 1)).ToList();

存储过程运行良好。如果我在没有参数的情况下调用 stop

像这样:

var redf = Context.Database.SqlQuery<string>("rv_test").ToList();

它也可以正常工作。有人知道为什么它不能使用参数吗?

【问题讨论】:

  • 会不会是权限问题?不是使用 EF,而是使用 ADO .NET 时,我看到通过应用程序运行时抱怨参数的错误,但 sp 本身运行良好。就我而言,它们是与 SQL 权限相关的问题。
  • 感谢@NoSaidTheCompiler 的建议,但这次的问题是错误的语法。我通过改变我的调用语法让它工作了。检查我的答案

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


【解决方案1】:

语法错误。我来自 SQL Server 背景,所以我不知道这些语法。这对我有用:

var res = Context.Database.SqlQuery<string>("call rv_test_param(@id)", new MySqlParameter("@id", 1)).ToList();

【讨论】:

    【解决方案2】:
    DateTime CurrentDateStarts = (DateTime)dtBegin.Value;
    
    DateTime CurrentDateEnds = (DateTime)dtEnd.Value;
    
    CurrentDateStarts = (new DateTime(CurrentDateStarts.Year, CurrentDateStarts.Month, CurrentDateStarts.Day));
    
    CurrentDateEnds = (new DateTime(CurrentDateEnds.Year, CurrentDateEnds.Month, CurrentDateEnds.Day)).AddDays(1).AddSeconds(-1);
                //
    
    geststokv1Entities2 con = geststokv1Entities2.newInstance; 
    
    var produit = cmbProduct.SelectedItem.ListObject as stock_produit; 
    
    var result = con.Database.SqlQuery<view_articleanalysis>("call get_articleanalysis(@produit_id)", new MySql.Data.MySqlClient.MySqlParameter("@produit_id", produit.PRODUIT_ID)).ToList();
    
    
    var list = result.Where(x =>  x.FREE_QUANTITY > 0
                 && x.Date_validation >= CurrentDateStarts
                 && x.Date_validation <= CurrentDateEnds
                ).ToList();
    
    
    UGFree.DataSource = list;
    

    【讨论】:

    • 虽然这段代码可以回答问题,但最好解释一下如何解决问题,并提供代码作为示例或参考。仅代码的答案可能会令人困惑且缺乏上下文。
    【解决方案3】:

    你可以换一种方式,例如:

     db.Database.ExecuteSqlCommand("CALL GenarateTable(@tablename)", new MySqlParameter("@tablename", tenantDetail.tablename));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多