【问题标题】:ASP.NET MVC EF Calling MySQL Stored Procedure with Out ParametersASP.NET MVC EF 使用 Out 参数调用 MySQL 存储过程
【发布时间】:2012-04-13 13:22:19
【问题描述】:

我正在使用 Entity Framework ExecuteStoreQuery 来调用带有输出参数的 MySql 存储过程。存储过程还返回一个结果集。

我收到以下错误。

例程 mydb.mysp 的 OUT 或 INOUT 参数 2 不是 BEFORE 触发器中的变量或 NEW 伪变量

怎么了?有没有更好的方法来调用 MySql sp 混合输出参数和结果集?

这是代码

     var outParam = new MySqlParameter();
                outParam.ParameterName = "totalRowsOut";
                outParam.MySqlDbType = MySqlDbType.Int64;
                outParam.Direction = ParameterDirection.Output;

var data =  db.ExecuteStoreQuery<PropertySearchResultRow>
(
    "call mysp(@input1, @totalRowsOut);", 
    new MySqlParameter("input1", 10),
    outParam
);

var result = data.ToList();
int totalRowsCount = (int)outParam.Value;

【问题讨论】:

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


    【解决方案1】:

    最终使用 ado.net MySqlCommand 调用存储的 proc 并获取 out 值。 Mysql 和 EF 集成不好。

    【讨论】:

      【解决方案2】:

      您只需要指定存储过程的名称并传入参数即可。像这样的

      var data =  db.ExecuteStoreQuery<PropertySearchResultRow>
      (
          "mysp",new MySqlParameter("input1", 10),outParam
      );
      

      【讨论】:

      • 这里是错误:您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在“mysp”附近使用的正确语法
      【解决方案3】:

      这是我使用 VS2012 和 Mysql 连接器 6.8.3 的示例代码,希望对某人有所帮助

      public static IList<MyClass> GetCustOrderHist(string someParameter)
          {
              IList<MyClass> data = ((IObjectContextAdapter)TestDashboardEntities).ObjectContext.ExecuteStoreQuery<MyClass>("CALL CustOrderHist({0});", someParameter).ToList();
      
              return data;
          }
      
          public class MyClass
          {
              public string ProductName { get; set; }
              public int TOTAL { get; set; }
          }
      

      【讨论】:

        猜你喜欢
        • 2020-01-09
        • 1970-01-01
        • 2017-09-18
        • 2021-05-18
        • 2020-11-08
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        • 2012-11-03
        相关资源
        最近更新 更多