【问题标题】:.NetCore MariaDb Dapper - How to Execute Stored procedure?.NetCore MariaDb Dapper - 如何执行存储过程?
【发布时间】:2021-09-20 00:57:33
【问题描述】:

我在使用 Dapper 和 Mysql (MariaDB) 执行存储过程时遇到问题。

这是存储过程:

CREATE DEFINER = `user` @`%`
PROCEDURE database.`proc_EnterRow`(
   IN `_entity_number`    INT(11),
   IN `_price`            DECIMAL(19, 13),
   IN `_valuation_date`   DATETIME)
   LANGUAGE SQL
   NOT DETERMINISTIC
   NO SQL
   SQL SECURITY DEFINER
BEGIN
  INSERT INTO tablename (entity_number,
                         entity_name,
                         valuation_date,
                         units,
                         price,
                         investor_code,
                         currency,
                         provisional,
                         isin,
                         type,
                         batchno,
                         maturity_date,
                         fx_rate,
                         transaction_id,
                         bond_reserves,
                         bond_reserves_percentage,
                         bond_reserves_conv,
                         sold,
                         verified)
     SELECT entity_number,
            entity_name,
            _valuation_date,
            units,
            _price,
            investor_code,
            currency,
            provisional,
            isin,
            type,
            batchno,
            maturity_date,
            fx_rate,
            transaction_id,
            bond_reserves,
            bond_reserves_percentage,
            bond_reserves_conv,
            sold,
            verified
       FROM tablename2 v
      WHERE v.entity_number = _entity_number`;
END;

当我使用 sql 编辑器执行时,存储过程可以正常工作

call proc_EnterRow(111,123.5456,'2021-07-09');

但是当我使用 Dapper ORM 从我的 .Net Core 调用它时,我不断收到错误消息

PROCEDURE database.proc_EnterRow 的参数数量不正确;预期 3,得到 0

我的代码.Net代码

DynamicParameters_parameters = new DynamicParameters();
_parameters.Add("@_entity_number", 111, DbType.Int32, SetDirection(parameterDirection), 11);
_parameters.Add("@_price", 123.5501, DbType.Decimal, SetDirection(parameterDirection));
_parameters.Add("@_valuation_date", "2021-01-01", DbType.Date, SetDirection(parameterDirection);
_dapper.Execute("dbname.proc_EnterRow", _parameters, commandType: CommandType.StoredProcedure);

提前感谢您的帮助。

【问题讨论】:

  • 您好@Roddy,能否分享您的代码,您是如何在asp.net core 代码中执行proc_EnterRow 的?
  • 还有什么可以帮助您的吗?

标签: mysql stored-procedures asp.net-core-mvc mariadb dapper


【解决方案1】:
var resulst = _dapper.Query<YourEntity>("dbname.proc_EnterRow", 
                                        new { _entity_number = 111, _price = 123.5501, _valuation_date = 2021-07-09}, 
                                        commandType: CommandType.StoredProcedure);

【讨论】:

    【解决方案2】:

    您似乎正在尝试从 ASP.NET Core 在您的 Maria Db 上执行存储过程。

    您收到错误是因为未准确传递存储过程参数。

    你可以试试这个方法:

    string name = "Kiron Test";
    int employeeId = 520520;
    int totalPrint = 10;
    
    var enterNewRowInDb = new List<PrinterJob>();
    enterNewRowInDb = _context.PrinterJobs
                              .FromSql("proc_EnterRow {0}, {1},{2}",name,employeeId,totalPrint)
                              .ToList();
    

    输出:

    另一种方式:

    using (var connection = new SqlConnection("Server=ServerName;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true"))
    {
        connection.Open();
    
        var command = connection.CreateCommand();
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "proc_EnterRow";
    
        command.Parameters.AddWithValue("@Name", name);
        command.Parameters.AddWithValue("@EmployeeId", employeeId);
        command.Parameters.AddWithValue("@TotalPrint", totalPrint);
    
        command.ExecuteNonQuery();
        connection.Close();
    }
    

    注意:它不会返回您的选择查询数据。为此,您必须执行数据读取器操作。

    希望对您有所帮助。如果您有任何疑问,请告诉我。

    【讨论】:

    • 您应该查看Can we stop using AddWithValue() already? 并停止使用.AddWithValue() - 它可能会导致意想不到和令人惊讶的结果...
    • @marc_s 感谢您提供的信息,我一定会检查出来的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2010-12-23
    • 2013-05-14
    相关资源
    最近更新 更多