ODP.net截断时间戳毫秒

时间:2017-03-22 17:45:39

标签: c# json oracle datetime odp.net

我正在使用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很陌生,所以我错过了访问数据的方法吗?

1 个答案:

答案 0 :(得分:0)

我得到了它的工作,但它不漂亮或可维护。我不得不使用myTimeStampProp = Convert.ToString(dr.GetOracleTimeStamp(29))而不是按名称引用列。就像我说的那样,如果没有列名,它的可维护性就会降低,但它确实有效。