DateTime переменную внести в ДБ

139
15 марта 2019, 12:50

Есть переменная DateTime^ date, нужно внести её значение в базу данных MYSQL в формате yyyy-MM-dd HH:ss:mm , как конвертировать значение в данный формат? C++ cli

INSERT INTO bank.transactions (id_transaction,send_date) VALUES ( null,  '"+date+"')",conDataBaseForTransaction);

Answer 1

Когда вы пишете

"INSERT ... VALUES (null,  '" + date + "')"

то при этом у переменной date автоматически вызывается метод ToString(). То есть это равноценно следующему:

"INSERT ... VALUES (null,  '" + date.ToString() + "')"

При это тип DateTime форматируется в соответствии с настройками текущей культуры. То есть если на компьютере пользователя установлен русский язык, формат вывода будет один, если английский язык - формат будет другой.

Метод DateTime.ToString имеет несколько перегрузок. Среди них принимающая строку формата. Воспользуемся ей.

Зададим формат вручную:

"INSERT ... VALUES (null,  '" + date.ToString("yyyy-MM-dd HH:ss:mm") + "')";

Есть также стандартные форматы. Например:

date.ToString("s") // 2018-10-27T17:28:20
date.ToString("u") // 2018-10-27 17:28:50Z

Не знаю, распарсит ли такие форматы MySql.

А теперь главное.

Никогда не конструируйте sql-запрос с помощью склейки строк. Это чревато sql-инъекцией (и позорным увольнением с клеймом профнепригодного).

Кроме того, такие запросы неэффективны, т. к. каждый раз компилируются, потому что запрос с новой датой отличается от запроса с предыдущей датой. Между тем запрос с параметрами кэшируется, потому что отличия значений параметров не берутся в расчёт.

Всегда используйте параметризованные запросы!

В итоге это должно выглядеть примерно так:

String ^query = L"INSERT INTO bank.transactions(id_transaction, send_date) VALUES (@id,  @date)";
MySqlCommand ^command = gcnew MySqlCommand(query, connection);
command->Parameters->Add(gcnew MySqlParameter("id", null));
MySqlParameter ^dateParam = gcnew MySqlParameter("date", MySqlType::DateTime);
dateParam->Value = date;
command->Parameters->Add(dateParam);

В синтаксисе могут быть ошибки, я не проверял (нет под рукой мускуля и неохота ставить провайдер). В случае чего, ищите примеры использования MySqlParameter.

READ ALSO
Ошибка (1146, “Table 'db_name.125059735_gjt' doesn't exist”) при обращении к таблице MySQL

Ошибка (1146, “Table 'db_name.125059735_gjt' doesn't exist”) при обращении к таблице MySQL

Использую Python3 и MySQLdb, пытаюсь обратиться к уже созданной таблице, которая имеет имя: '125059735_gjt'

134
MySQL. Размер ibdata1

MySQL. Размер ibdata1

На мастере файл ibdata1 занимает половину базыВ настройках innodb_file_per_table=1

137
Изображение на фоне

Изображение на фоне

У меня есть блок, к примеру, с ID "topic"Хочу поставить на фон изображение так, чтобы оно, независимо от ширины блока, всегда адаптировалось под...

157