Как получить значение из процедуры с помощью dapper OracleDynamicParameters ()? - PullRequest
0 голосов
/ 07 мая 2019

В моем приложении я установил Dapper из пакета nuget в основной проект .net. Я запускаю процедуру. В режиме отладки я вижу, что параметр получает значение, но не могу прочитать это значение.

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 Ответ

1 голос
/ 07 мая 2019

Я никогда не использовал Dapper с Oracle, но я вижу следующие улучшения в вашем коде.

Как уже упоминалось здесь , 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);
...