如何使用精巧的OracleDynamicParameters()从过程中获取价值?

时间:2019-05-07 07:05:12

标签: c# oracle .net-core dapper dapper.oracle

在我的应用程序中,我已经从.net核心项目中的nuget软件包安装了Dapper。我运行一个程序。我在调试模式下看到该参数接收到该值,但无法读取该值。

public decimal AddMaster(MaterialMaster req)
{
    decimal id = 0;
    try
    {
        var dynamicParam = new OracleDynamicParameters();
        var conn = this.GetConnection();
        if (conn.State == ConnectionState.Closed) 
        { conn.Open(); }
        if (conn.State == ConnectionState.Open)
        {
            dynamicParam.Add("P_CAL_ID", OracleDbType.Decimal, ParameterDirection.InputOutput);
            dynamicParam.Add("P_MATERIAL_KOD", OracleDbType.Varchar2, ParameterDirection.Input, req.MATERIAL);
            dynamicParam.Add("P_SEZON_KOD", OracleDbType.Varchar2, ParameterDirection.Input, req.SEASON);
            dynamicParam.Add("P_CURRENCY_ID", OracleDbType.Decimal, ParameterDirection.Input,0);
            dynamicParam.Add("P_FABRIKA_KOD", OracleDbType.Varchar2, ParameterDirection.Input, req.PLANT_ID);
            dynamicParam.Add("P_STATUS", OracleDbType.Decimal, ParameterDirection.Input,1);
            dynamicParam.Add("P_EKLEYEN_KULLANICI", OracleDbType.Decimal, ParameterDirection.Input, 60950);
            dynamicParam.Add("P_EKLENEN_TARIH", OracleDbType.Date, ParameterDirection.Input, new DateTime());
            dynamicParam.Add("P_GUNCELLEYEN_KULLANICI", OracleDbType.Decimal, ParameterDirection.Input, 60950);
            dynamicParam.Add("P_GUNCELLENEN_TARIH", OracleDbType.Date, ParameterDirection.Input, new DateTime());
            dynamicParam.Add("P_CUSTOMER_ID", OracleDbType.Decimal, ParameterDirection.Input, req.CUSTOMER_ID);
            var x = SqlMapper.Query(conn, "BMS.PA_CALCULATION_TOOL.INS_CAL_COST_CAL_MASTER", param: dynamicParam, commandType: CommandType.StoredProcedure).SingleOrDefault();
            id = dynamicParam.Get<OracleDecimal>("P_CAL_ID");//<==This line throws error
        }
        return id;
    }
    catch(Exception ex)
    {
        return id;
    }
}
id = dynamicParam.Get<OracleDecimal>("P_CAL_ID");

上一行引发错误。

  

没有发现Get方法为错误。

如何解决此错误。我无法联系到P_CAL_ID

1 个答案:

答案 0 :(得分:1)

我从未将Dapper与Oracle一起使用,但是我可以看到代码中的以下改进。

here所述,Get是通用方法。

public T Get<T>(string name)

所以,也许您应该像下面这样阅读它:

OracleDecimal oraid = dynamicParam.Get<OracleDecimal>("P_CAL_ID");

,然后将其转换为原生decimal类型。

我不确定,但是可能您需要将参数方向更改为Output

dynamicParam.Add("P_CAL_ID", OracleDbType.Decimal, ParameterDirection.Output);