Как сохранить значение from datepicker в строковой переменной

У меня есть текстовое поле datepicker. Я хочу сохранить дату, выбранную в datepicker, в строковую переменную, используя С#. Как будет выглядеть код?

string date = datepicker.Text; //Does not work

Я позже в коде хочу сохранить дату в базе данных, например, следующий код:

string sql = "INSERT INTO tbl_mote (time, date, id) VALUES ('" + time + "','" + date + "','" + id + "')";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);
int no = command.ExecuteNonQuery();

Datepicker:

Случается, что сегодняшняя дата всегда сохраняет дату переменной, а не выбранную дату.

3 ответа

Хорошо, вот и проблема. Я включил код ниже в загрузку страницы. Поэтому Datepicker всегда возвращался к сегодняшней дате, даже если я изменил его в календаре. После удаления линии все работало отлично. Спасибо всем за вашу помощь!

datepicker.Text = DateTime.Now.ToShortDateString();


1) Используйте datepicker.Value, чтобы получить выбранную дату как объект DateTime. Объект DateTime имеет несколько функций для создания строки для этой даты.

2) Не повторяйте, повторяю, не конкатенировать строки для параметров SQL. Используйте параметры в запросе (для SQL-сервера, на котором они начинаются с @), и добавьте значения в объект Command позже. Я не использовал команду Npgsql, но у нее должна быть аналогичная функция для SQL Server SqlCommand.

3) Вы можете использовать (1), чтобы получить строковое значение, если оно вам нужно, но не использовать его для вставки в базу данных, если только определенные объекты базы данных не понимают объекты DateTime. Вместо этого используйте объект DateTime, который вы получили, в качестве значения, которое вы добавляете к объекту команды.


Имущество, которое вы ищете, - SelectedDate:

string date = null;
if(datepicker.SelectedData.HasValue)
{ date = datepicker.SelectedDate.Value.ToString("MM/dd/yyyy");
}
else
{ // don't forget to define a default behavior. Your DB seems to choose today as a default date when the provided one doesn't fit. // Even if that ok for you, you should leave a comment to point it out to your colleagues/future self.
}

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

licensed under cc by-sa 3.0 with attribution.