2013-04-04 44 views
0

我有利用日期作爲輸入的簡單的存儲過程:EF執行失去小時/分鐘

CREATE OR REPLACE PROCEDURE delete_time(myTime DATE) IS 
BEGIN 
DELETE FROM mytable WHERE time = myTime; 
END; 
/

這已被使用函數導入添加到我的EDMX,和類型的映射的是SSDL側的Date和CSDL上的DateTime。

問題是,當我使用的DateTime的小時數從.NET運行程序和分鐘沿途某處遺失:

DateTime dt = new DateTime(2013, 4, 3, 12, 15, 00); 
var timeParam = new ObjectParameter("myTime", dt) : 
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("DeleteTime", timeParam); 

這將運行存儲過程,但會刪除行,時間= 03- APR-2013 00:00:00而不是03-APR-2013 12:15:00

Oracle客戶端(我使用11.2.0.3.20)中是否存在一些錯誤?或者我在上面做錯了什麼?

我也嘗試過使用時間戳作爲我的程序的輸入類型,但隨後調用函數時我得到這個錯誤:將整個輸入字符串

任何想法之前的日期格式的畫面結束: ORA-01830?

+0

什麼是edm類型的時間參數? – 2013-04-04 07:51:21

+0

'timeParam.ParameterType'顯示什麼? – 2013-04-04 08:10:54

+0

只是一個瘋狂的猜測 - 是否可以將param作爲字符串發送給oracle?如果是這樣,oracle會根據可能是'DD-MON-YYYY'的nls_date_format將其轉換。您可以嘗試(僅用於檢查)將存儲過程更改爲'DELETE FROM mytable WHERE time = to_date(myTime,'DD-MON-YYYY hh24:mi:ss')',並將參數類型更改爲VARCHAR2(這不是正確的解決方案 - 只是一個支票) – 2013-04-04 08:21:13

回答

0

我有這個問題試圖執行一個使用實體框架的Oracle過程。所以我確實喜歡通過Date參數:

var objects = _dbContext.Database.SqlQuery<MyObject>("BEGIN My_procedure(to_date('01/01/2016', 'dd/mm/yyyy hh24:mi:ss')); END;").ToList();