xTMx9 Ответов: 2

C# winform как преобразовать строку, введенную пользователем, в datetime, чтобы ее можно было вставить в SQL server


Привет,
У меня есть замаскированное текстовое поле в моей форме, где пользователь вводит дату как ДД/ММ/гггг
а затем это значение вставляется в таблицу sql server.
При выполнении запроса я получаю следующую ошибку:
the conversion of a varchar data type to a datetime data type resulted in an out-of-range value


Я пробовал много способов и пытался искать подобные проблемы в интернете и пробовал исправления/ответы, но я все еще получаю ошибку.
Ошибка возникает только тогда, когда введенное значение " dd " превышает 12, поэтому я предполагаю, что sql server принимает это значение как MM вместо dd.
Ниже приведено то, что я пробовал.

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

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


Инструкция insert выглядит следующим образом:
string query = "INSERT INTO dateTbl(recD) VALUES('" + receivedDate + "')"

Richard MacCutchan

почему вы используете текстовое поле, а не DateTimePicker?

xTMx9

Я использую текстовое поле, потому что в форме много текстовых полей, и пользователь должен быстро вводить данные и переключаться с одного на другое, поэтому решил, что наличие замаскированного текстового поля будет быстрее.
Я никогда раньше не использовал элемент управления DateTimePicker, поэтому не уверен, можно ли вводить текст, как в текстовом поле, или всегда выбирать из календаря.

Richard MacCutchan

Вы действительно верите, что средний пользователь может ввести дату в вашем конкретном формате быстрее, чем он/она может нажать на элемент управления?
И есть простой способ узнать, какие функции поддерживает этот элемент управления.

xTMx9

только несколько пользователей используют эту форму, и это быстрее для них таким образом, "введите" из предыдущего поля, введите кучу цифр быстро, а затем введите, а не нажимайте на элемент управления

2 Ответов

Рейтинг:
20

CHill60

Не используйте в запросе сцепленную строку. Вместо этого используйте параметризованный запрос.

Если это не полностью решит вашу проблему (она должна быть), то попробуйте отформатировать дату как гггг-МММ-ДД


xTMx9

Пришлось отредактировать код и с помощью параметризованного запроса решить эту проблему, спасибо.

Рейтинг:
2