我正在使用ODP.net从Oracle获取一些数据,在一个特定的数据集中,我得到了一个Timestamp类型的字段。无论我做什么,无论是将其转换为DateTime还是将其转换为字符串,它总是截断毫秒。
这是我的存储过程返回的一个示例:
2016/10/28 4:05:53.873 PM
这就是当我将它映射到我的模型时的样子,无论该属性是DateTime还是字符串:
2016/10/28 4:05:53
以下是我的过程调用:
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Schema.Package.someProcedure";
cmd.Parameters.Add(new OracleParameter("P_1", OracleDbType.Int32, ParameterDirection.Input));
cmd.Parameters.Add(new OracleParameter("P_output", OracleDbType.RefCursor, ParameterDirection.Output));
cmd.Parameters["P_1"].Value = someVar;
using (OracleDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
myObjList.Add(
new myObject
{
prop1 = Convert.ToString(dr["ID_1"]),
prop2 = Convert.ToString(dr["ID_2"]),
dtProp = Convert.ToDateTime(dr["TIME_STAMP1"]),
stringProp = Convert.ToString(dr["TIME_STAMP2"])
});
}
}
最终目标是将此对象列表序列化为JSON,DateTime属性提出了另一个问题,即它以这种格式序列化:
\/Date(1477685153873)\/
因此,如果可能的话,我希望将Oracle时间戳转换为字符串,同时保持毫秒数。我对ODP.net很陌生,所以我错过了访问数据的方法吗?
答案 0 :(得分:0)
我得到了它的工作,但它不漂亮或可维护。我不得不使用myTimeStampProp = Convert.ToString(dr.GetOracleTimeStamp(29))
而不是按名称引用列。就像我说的那样,如果没有列名,它的可维护性就会降低,但它确实有效。