Goran Bibic Ответов: 3

Вставить в преобразованиях в SQL datetimepickervalue удалось, когда вставить в SQL с#


Datetimepicker value
 
Conversion failed when converting date and/or time from character string while inserting datetime


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

string saveStaff = "INSERT into dbo.table (name, datum) VALUES ('" + nameTextBox.Text + "', '" + datumDateTimePicker.Value.Date + "')";

3 Ответов

Рейтинг:
2

Wendelius

Никогда не пытайтесь сохранить данные путем объединения значения из элемента управления непосредственно в инструкцию SQL. Это оставит вас широко открытыми для SQL-инъекций и введет проблемы преобразования и т. д.

Вместо этого используйте Класс Объектов Sqlparameter (Системы.Данных.Поставщики sqlclient)[^]

Для некоторых примеров взгляните на Правильное выполнение операций с базой данных[^]


Рейтинг:
2

Christiaan van Bergen

Вероятно, у вас возникли проблемы с локализацией. дата.ToString() не имеет ожидаемого формата для SQL. Если вам просто нужна дата, вы можете использовать

string saveStaff = "INSERT into dbo.table (name, datum) VALUES ('" + nameTextBox.Text + "', '" + datumDateTimePicker.Value.Date.ToString("yyyyMMdd") + "')";
Но будьте осторожны: Венделиус сделал очень хороший вывод в своем ответе. Никогда не используйте конкатенацию строк при построении инструкции SQL. Используйте параметры!


Рейтинг:
2

Patrice T

Цитата:
Ошибка преобразования при преобразовании даты и/или времени из символьной строки при вставке datetime

Проблема в том, что datumDateTimePicker.Value.Date это не строка, или не может быть преобразована в строку, или не то, что ожидал SQL.
Отладчик может помочь вам увидеть, что есть что.

string saveStaff = "INSERT into dbo.table (name, datum) VALUES ('" + nameTextBox.Text + "', '" + datumDateTimePicker.Value.Date + "')";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]