Как вставить дату в sqlite из элемента управления MonthCalendar — c # — Windows Forms

#c# #sqlite #date

#c# #sqlite #Дата

Вопрос:

Я хочу скопировать выбранную дату из элемента управления monthCalender в базу данных sqlite на c #. Пытался сделать это с помощью toString : выдал мне эту форму строки (ММ-ДД-ГГГГ-00:00:00 УТРА) и логическую ошибку из sqlite. Пытался сделать это с помощью ToShortDateString: он выдал мне эту строку (ММ-ДД-ГГГГ). Ошибка sqlite отсутствует до повторной проверки записи.На этот раз ошибка была «строка не была распознана как допустимая дата-время». Я знаю, что формат даты для sqlite — ГГГГ-ММ-ДД. Должен ли я преобразовать строку?

     string startdate = monthCalendar1.SelectionRange.Start.ToShortDateString();
    string query = $"UPDATE status SET user = {listBox1.SelectedValue}"  
                       $" , userbadge = {listBox2.SelectedValue} "  
                       $" , date = {startdate}"  
                       $" WHERE status.id = {index}"; 
           
    openConnection();
    SQLiteCommand com = new SQLiteCommand(query, connection);
    com.ExecuteNonQuery();
    closeConnection();
  

Комментарии:

1. Каково определение таблицы? И какой драйвер вы используете? Я бы не рекомендовал это для выполнения обновления. Это открывает ваше приложение для внедрения SQL.

2. Я действительно предлагаю использовать параметры (если это Microsoft.Data.SQLite) . Они также упрощают обработку даты и времени. Фактически, это может полностью устранить вашу проблему.

Ответ №1:

Я думаю, вы можете решить свою проблему, просто используя параметры:

 command.CommandText =
@"
    UPDATE status SET user = $user, userbadge = $userbadge, date = $startdate WHERE status.id = $index
";
command.Parameters.AddWithValue("$user", listBox1.SelectedValue);
command.Parameters.AddWithValue("$userbadge", listBox2.SelectedValue);
command.Parameters.AddWithValue("$startdate ", startdate );
command.Parameters.AddWithValue("$index", index);
  

Согласно этому документу, значение будет сохранено как «гггг-ММ-дд ЧЧ: мм: сс.FFFFFFF».

Ответ №2:

Решение с параметрами привело к той же ошибке. После дальнейшего поиска я обнаружил, что, возможно, преобразование строки выполнит эту работу. И да, это сработало!!!

 DateTime datetime = Convert.ToDateTime(startdate);
  

Комментарии:

1.Ах, я почему-то предположил, что startDate это уже DateTime .