使用DATE参数执行Oracle存储过程时,会丢失小时/分钟

时间:2013-04-04 07:42:14

标签: c# oracle entity-framework

我有一个使用DATE作为输入的简单存储过程:

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);

这会运行存储过程,但会删除TIME = 03-APR-2013 00:00:00而不是03-APR-2013 12:15:00的行

Oracle客户端是否存在一些错误(我使用的是11.2.0.3.20)?或者我上面做错了什么?

我也尝试使用TIMESTAMP作为我的过程的输入类型,但是在调用函数时我得到了这个错误: ORA-01830:日期格式图片在转换整个输入字符串之前结束

有什么想法吗?

1 个答案:

答案 0 :(得分: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();