使用带有mysql参数的Database.ExecuteSqlCommand的正确语法是什么?

时间:2017-03-08 17:49:13

标签: c# mysql sql entity-framework

执行mysql存储过程

  var affectedRows = 
      context.Database.ExecuteSqlCommand("exec UpdateStatus @p_customerId, @p_id",
            new MySqlParameter("p_customerId", "006"),
            new MySqlParameter("p_id", 9));

获取MySqlException

  

未处理的类型' MySql.Data.MySqlClient.MySqlException'发生在EntityFramework.dll

中      

其他信息:您的SQL语法有错误;校验   与您的MySQL服务器版本对应的手册   在exec UpdateStatus附近使用的语法   ' 006',9'在第1行

当我尝试用Update语句替换存储过程名时,它可以工作。但我想改为调用存储过程。

我尝试使用Entity Framework 5和6同样的错误

1 个答案:

答案 0 :(得分:1)

从命令调用存储过程的MySQL语法是“CALL”。参数名称也应该在前面有“@”。

因此您需要更改代码,如下所示。

var affectedRows = 
  context.Database.ExecuteSqlCommand("CALL UpdateStatus (@p_customerId, @p_id)",
        new MySqlParameter("@p_customerId", "006"),
        new MySqlParameter("@p_id", 9));