Вставьте DateTime из ответа JSON в MySQL DB, используя C # - PullRequest
0 голосов
/ 06 сентября 2018

Я искал это для того, что я чувствую, чтобы быть много, но все темы, кажется, ищут, чтобы вставить дату и время, а я не ..

В настоящее время я получаю дату и время вследующий формат:

"Date":"2018-03-03T11:00:00Z"

Я пытаюсь вставить в базу данных MySQL, где набор данных столбца DATETIME

Я использую следующую инструкцию INSERT:

"INSERT INTO tblname (col1, col2) VALUES (@Name, @Date) ON DUPLICATE KEY UPDATE col1 = @Name";

Предоставление значений через параметр AddWithValue следующим образом:

Command.Parameters.AddWithValue("@Date", Jo["Results"][x]["Date"]);

Это всегда приводит к тому, что я получаю следующее в течениеБаза данных:

0000-00-00 00:00:00

Ниже приведена полная измененная версия (для краткости) используемого кода:

using MySql.Data.MySqlClient;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Text;

namespace stackoverflow
{
class forstackoverflow
{
    public static int x = 0;
    public static JObject Jo { get; set; }

    static void Main()
    {

        string apiUrl = "REMOVED URL";
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiUrl);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader readerStream = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
            string json = readerStream.ReadToEnd();
            readerStream.Close();
            var Jo = JObject.Parse(json);
            JArray id = (JArray)Jo["Results"];
            for (int x = 0; x < id.Count; x++)
            {
                string sqlstring = "sql already highlighted.";

                MySqlConnection Connection = null;
                const string ConnectionString = @"REMOVED CONNECTION DETAILS";
                Connection = new MySqlConnection(ConnectionString);
                MySqlCommand Command = new MySqlCommand(sqlstring, Connection);

                Command.Parameters.AddWithValue("@Name", (string)Jo["Results"][x]["name"]);
                Command.Parameters.AddWithValue("@Date", (string)Jo["Results"][x]["date"]);

                Connection.Open();
                Command.ExecuteNonQuery();
                Connection.Close();
                Connection.Dispose();

                Console.WriteLine((string)Jo["Results"][x]["name"] + " was inserted or updated in the database.");
            }
        }
    }
  }
}

1 Ответ

0 голосов
/ 06 сентября 2018

Когда я пытаюсь вставить DateTime 2018-03-03T11:00:00Z в мою базу данных (которая является действительным типом DATETIME), я получаю следующую ошибку:

Warning: #1265 Data truncated for column 'date' at row 1

Я предполагаю, что ваша база данных обрабатывает эту ошибку и по умолчанию 0000-00-00 00:00:00. MySQL DATETIME должен быть в формате yyyy-MM-dd HH:mm:ss. Это означает, что если вы измените свой пример и удалите из него T и Z, а также вставите пробел между датой и временем, вы сможете вставить его в свою базу данных.

Вы можете поместить это в правильный формат просто используя:

    var test = "2018-03-03T11:00:00Z";
    test = test.Replace("T", " ").Replace("Z", " ");

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...