2017-02-01 30 views
0

在Postgres中調用DB函數時,String的類型更改爲textDateTime更改爲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與時間戳類似的故事。

嘗試使用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

不知道 - 我是一個db分子,而不是java –

相關問題