Member 13174280 Ответов: 1

Проблема обновление записи с полем данных


база данных MySQL

edData - это текстовое поле
содержание edData.text = 08/03/2020

данные поля в таблице MySql-это DATETIME

Что я уже пробовал:

string Datas = edData.Text.Substring(6, 4) + "-" + edData.Text.Substring(3, 2) + "-"+ edData.Text.Substring(0, 2) + " 00:00:00,000";          

DateTime data = DateTime.ParseExact(Datas, "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture);

const string quote = "\"";

string Query = "UPDATE tb_spese ";
                   Query += " SET id_codice = " + @idCodice + ",";
                   Query += " data = " + quote +  @Datas + quote + ",";
                   Query += " entrata = " + quote + entrata + quote;

ex.Message = "Incorrect date value: '2020-03-08 00:00:00,000' for column 'data' at row 1"

ZurdoDev

И в чем же проблема? Кроме того, что это выглядит так, как будто вы разделываете даты вместо того, чтобы просто использовать даты и элементы управления датами.

1 Ответов

Рейтинг:
2

Richard Deeming

Не делай этого так!

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

И нет никакой необходимости манипулировать строкой таким образом, прежде чем анализировать дату. Просто используйте правильный формат в ParseExact:

DateTime date = DateTime.ParseExact(edData.Text, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);

// TODO: Add a WHERE clause to limit which rows are updated:
const string Query = "UPDATE tb_spese SET id_codice = @idCodice, data = @date, entrata = @entrata"; 

using (var connection = new SqlConnection("..."))
using (var command = new SqlCommand(Query, connection))
{
    command.Parameters.AddWithValue("@idCodice", idCodice);
    command.Parameters.AddWithValue("@date", date);
    command.Parameters.AddWithValue("@entrata", entrata);
    
    // TODO: Add other parameters here for the WHERE clause.
    
    connection.Open();
    command.ExecuteNonQuery();
}

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]