2016-06-28 36 views
0

我有一個C#程序,我想運行一個插入記錄的MySQL查詢。在這個記錄中,我有一個時間戳字段,必須是服務器時間戳,而不是客戶端時間戳。 所以,我寫這篇文章:MySQL C#插入查詢服務器時間戳

start_session = new MySqlDataAdapter("INSERT INTO CUBE_WORKTIME(ID_WORKTIME, 
             ID_RISORSA_FK,DATA,ORA_INIZIO_EVENTO, ORA_FINE_EVENTO, 
             ID_CDC_FK, CAUSALE, LAST_EVENT) 
          VALUES ('', '"+ idrisorsa_global + "', DATE(NOW()),NOW(), 
            NULL, '"+ IDCDC +"', 'Login', 'Y')", connection); 

DataTable start_session_dataset = new DataTable(); 
start_session.Fill(start_session_dataset); 

這個查詢效果很好,ID_RISORSA_FKIDCDC領域是正確的。但日期和日期時間是0000-00-00和0000-00-00 00:00:00。 我也嘗試添加引號,但沒有效果。

任何想法?

+0

哪些列的數據和ORA_INIZIO_EVENTO的datypes?字段ID_WORKTIME是AUTONUMBER嗎? – Steve

回答

1

首先要改變的是使用MySqlDataAdapter來插入記錄。雖然這可以起作用,但這不是用於這項工作的正確類。一個簡單的MySqlCommand是要使用的正確對象,並且所需的基礎結構要少很多

第二個要改變的是你建立你的sql查詢的方式。不要連接字符串以形成一個sql命令,但使用參數。這避免了Sql注入和解析問題。

所以,你的代碼可以改寫爲

string cmdText = @"INSERT INTO CUBE_WORKTIME 
     (ID_RISORSA_FK,DATA,ORA_INIZIO_EVENTO, ORA_FINE_EVENTO,ID_CDC_FK, 
      CAUSALE, LAST_EVENT) VALUES (@risorsaID, CURDATE(), CURTIME(), 
      NULL, @cdcID, 'Login', 'Y')"; 

MySqlCommand cmd = new MySqlCommand(cmdText, connection); 
cmd.Parameters.Add("@risorsaID", MySqlDbType.Int32).Value = idrisorsa_global; 
cmd.Parameters.Add("@cdcID", MySqlDbType.Int32).Value = IDCDC; 
int rowsInserted = cmd.ExecuteNonQuery(); 
+0

你什麼時候學過MySQL的?我沒有看到它在你的個人資料:) – Rahul

+0

那麼,在很多項目中使用它,時下有點生疏,但仍然.... – Steve

+0

我遵循你的代碼,但在數據庫的領域是再次出現0000-00-00等。 ..這是我的表http://imgur.com/ndX0JHa。 –