创建插入语句后,我想知道两个值,即最后插入的id和日期。
这是我的插入声明
cmd.CommandText = "INSERT INTO message (user_id, category_id, media) " +
"VALUES (:user_id, :category_id, :media)" +
"RETURNING id, TO_DATE(TO_CHAR(creation_date, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') INTO :last_insert_id, :last_creation_date";
参数
cmd.Parameters.Add(new OracleParameter()
{
ParameterName = ":last_creation_date",
OracleDbType = OracleDbType.Date,
Direction = ParameterDirection.Output
});
当我尝试获取日期时,只有年,月,日返回00:00:00 ......
DateTime.Parse(cmd.Parameters[":last_creation_date"].Value.ToString())
我如何从价值中获得完整的日期时间?
答案 0 :(得分:0)
有几件事:
查看OracleDbType的文档。您正在使用OracleDbType.Date
,它映射到Oracle DATE
类型 - 这只是一个日期。您应该使用OracleDbType.TimeStamp
,或者与您正在使用的列匹配的任何类型。
Mitch在问题评论中是正确的。你对字符串的转换太多了。在绝大多数情况下,您不应使用字符串来表示数据库中的日期或时间,也不应使用与数据库通信的客户端代码。您的SQL应该简单地改为:
RETURNING id, creation_date INTO :last_insert_id, :last_creation_date
同样,您的.NET代码应类似于:
DateTime dt = (DateTime) cmd.Parameters[":last_creation_date"].Value;