2017-02-01 11 views
0

При вызове функции DB в Postgres тип для String изменяется на text, а DateTime - timestamp. Есть ли способ гарантировать, что этого не произойдет?Dapper: Строка передается как текст при вызове функций postgres.

Установка: функция DB:

foo(v_from character varying, v_to character varying, v_date date) 

Щеголеватый код:

public static decimal GetValue(DateTime vdate, string cur) { 
     string sql = @"SELECT _public.foo(@vFrom, @vTo, @vDate)"; 
     var data = connection.QueryFirstOrDefault<decimal>(
              sql, 
              new 
              { 
               vFrom = cur, 
               vTo = cur, 
               vDate = valdate, 
              } 
              ); 
} 

Я получаю следующее сообщение об ошибке:

Npgsql.PostgresException : 42883: Function _public.foo(text, text, timestamp without time zone) does not exist 

Как-то строка преобразуется в текст вместо символа VARCHAR. Аналогичная история для DateTime в timestamp.

Пробовал вариант с DynamicParameters.Add(), но все тот же результат.

+0

пытаются неявное приведение: 'ВЫБРАТЬ _public.foo (@vFrom :: характер изменения, @vTo :: характер изменения, @vDate :: даты)' –

ответ

2

Попробуйте?

public static decimal GetValue(DateTime vdate, string cur) { 
     string sql = @"SELECT _public.foo(@vFrom::character varying, @vTo::character varying, @vDate::date)"; 
     var data = connection.QueryFirstOrDefault<decimal>(
              sql, 
              new 
              { 
               vFrom = cur, 
               vTo = cur, 
               vDate = valdate, 
              } 
              ); 
} 
+0

Отлично! Это работает ... Наверное, нет способа определить этот тип как часть sql? – Achilles

+0

Не знаю - я парень из ДБ, а не ява –

 Смежные вопросы

  • Нет связанных вопросов^_^