MySQL C# 插入查询服务器的时间戳

发布时间: 2017/1/2 14:44:46
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个 C# 程序,我想要运行一个 MySQL 查询,插入一条记录。在此记录我有必须是服务器的时间戳,没有客户端时间戳的时间戳字段。 所以,我写这篇文章︰

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。 我也尝试添加引号,但没有效果。

有什么想法?

解决方法 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();
赞助商