2015-11-04 80 views
-1

創建插入語句後,我想知道兩個值,最後插入的ID和日期。將日期值轉換爲日期時間

這是我的INSERT語句

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

當我嘗試獲取日期,只有年,月,日回報率與0點〇〇分00秒...

DateTime.Parse(cmd.Parameters[":last_creation_date"].Value.ToString()) 

如何從值中接收完整的日期時間?

+1

你是從日期時間轉換,爲char,然後日期。爲什麼? –

+0

因爲當我把它變成一個varchar2(與TO_CHAR)它返回零... – yooouuri

+0

爲什麼要轉換?添加時間戳參數並且不執行轉換 –

回答

0

幾件事情:

  • 在文檔看看爲OracleDbType。您正在使用OracleDbType.Date,它映射到一個Oracle DATE類型 - 這只是一個日期。您應該使用OracleDbType.TimeStamp或任何類型與您正在使用的列匹配。

  • 米奇在問題評論中是正確的。你有太多的轉換到字符串和從字符串。在絕大多數情況下,您不應該使用字符串來表示數據庫中的日期或時間,也不應使用與數據庫通信的客戶端代碼。你的SQL應改變單純:

    RETURNING id, creation_date INTO :last_insert_id, :last_creation_date 
    

    同樣,你的.NET代碼應類似於:

    DateTime dt = (DateTime) cmd.Parameters[":last_creation_date"].Value; 
    
相關問題