MySQL基于日期时间插入

本文关键字:时间 插入 日期 于日期 MySQL | 更新日期: 2023-09-27 18:23:42

这是我的第一篇帖子,所以如果我在不知不觉中违反了关于帖子礼仪的任何规则,我深表歉意。

我正在使用C#和Redmine API迁移数据库条目。我需要提取XML中的时间条目,并将其插入MySQL,前提是时间条目比数据库中当前存在的时间条目更新。

现在,我正在通过简单地将原始MySQL数据库条目重新路由回MySQL并放入一个新表来构建这个原型。稍后我将使用类似于SAP软件的ERP软件。

我不确定程序逻辑是需要主要在C#代码中,还是在MySQL语句中。以下是我的困境:

foreach (TimeEntry t in timeEntries.list)
{
   comm.CommandText =
     "INSERT INTO time_entries(time_entry_id,project_id,issue_id,user_id,activity_id,hours,comments,"
     + "spent_on,created_on,updated_on,customer_number)"
     + "VALUES(?time_entry_id,?project_id,?issue_id,?user_id,?activity_id,?hours,?comments,?spent_on,"
     + "?created_on,?updated_on,?customer_number)";
     comm.Parameters.AddWithValue("?time_entry_id", t.id);
     comm.Parameters.AddWithValue("?project_id", t.project.Id);
     comm.Parameters.AddWithValue("?issue_id", t.issue.id);
     comm.Parameters.AddWithValue("?user_id", t.user.id);
     comm.Parameters.AddWithValue("?activity_id", t.activity.id);
     comm.Parameters.AddWithValue("?hours", t.hours);
     comm.Parameters.AddWithValue("?comments", t.comments);
     comm.Parameters.AddWithValue("?spent_on", t.spent_on);
     comm.Parameters.AddWithValue("?created_on", t.created_on);
     comm.Parameters.AddWithValue("?updated_on", t.updated_on);
     comm.Parameters.AddWithValue("?customer_number", t.custom_fields.list[0].value);
     comm.ExecuteNonQuery();
     comm.Parameters.Clear();  
     continue; 
}

当然,所有的插入都很好,程序的后续运行只会插入重复的记录。完成后,其想法是,它将作为每日cron作业运行,只使用新的时间条目更新MySQL。

正如我所提到的,稍后我将直接将XML数据发送到类似于SAP软件的ERP程序,但现在我想确保MySQL到MySQL的原型首先工作。

我是一个相对较新的程序员,也是第一次发帖者,所以如果我的代码逻辑有缺陷,或者我的问题不够具体,请告诉我。提前谢谢。

MySQL基于日期时间插入

实际上,我刚刚找到了一个可行的解决方案。不确定这是否是最好的方法,但它有效,所以我很高兴。

我所做的只是将updated_on更改为MySQL中的主键,然后处理为重复条目引发的异常:

try
                {
                    comm.ExecuteNonQuery();
                }
                catch(MySql.Data.MySqlClient.MySqlException mySqlEx)
                {
                    Console.WriteLine("Duplicate entry found");
                }  

我想发布这段代码,以防它能帮助其他人寻找同一问题的答案。就我而言,这个问题现在已经解决了。

您可以尝试使用DUAL

INSERT INTO time_entries (time_entry_id, project_id, issue_id, user_id,
                         activity_id, hours,comments, spent_on,
                         created_on, updated_on, customer_number) 
SELECT ?time_entry_id, ?project_id, ?issue_id, ?user_id, ?activity_id,
       ?hours, ?comments, ?spent_on, ?created_on, ?updated_on, 
       ?customer_number
FROM DUAL 
WHERE  '2015-11-20' NOT IN (SELECT YourTimeField from time_entries)

我试着写一个清晰的例子(希望你理解其中的逻辑)