2015-11-04 5 views
-1

После создания инструкции insert я хочу знать два значения, последний вставленный id и дату.Значение даты возврата в DateTime

Это моя вставка заявление

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

Как я могу получить полное datetime из значения?

+1

конвертировании из DateTime, в уголь, а затем на сегодняшний день. Зачем? –

+0

Потому что, когда я превращаю его в varchar2 (с TO_CHAR), он возвращает ноль ... – yooouuri

+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; 
    
Смежные вопросы