2015-07-28 3 views
0

Привет, есть программа, над которой я работаю, и в разделе дневника у меня возникают некоторые проблемы.Преобразование и сравнение mysql и C# datetime

при регистрации записей Я использую следующий код, где appdate - дата назначения. dtpappdate - мой datetimepicker.

cmd.Parameters.AddWithValue("?appdate", dtpappdate.Value.ToShortDateString()); 

приведенный выше код работает нормально и когда я делаю записи. Он успешно сохраняет дату в базе данных mysql.

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

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

DateTime dn = new DateTime(); 
     dn = DateTime.Now; 

     string constring = "Server=localhost;Database=vetsoft; uid=root;pwd=geyikler88;"; 
     string command = "SELECT * FROM vetsoft.clients "; 

     try 
     { 
      using (MySqlConnection myCon = new MySqlConnection(constring)) 
      { 
       using (MySqlCommand cmd = new MySqlCommand(command, myCon)) 
       { 
        myCon.Open(); 

        MySqlDataReader myReader = cmd.ExecuteReader(); 

        while (myReader.Read()) 
       { 
        if(Convert.ToDateTime(myReader["appdate"].ToString()) == dn) 
        { 
         listBox1.Items.Add("İsim: " + myReader["name"].ToString() + " Telefon: " + myReader["phone"].ToString() + " P İsim: " + myReader["pname"].ToString() + " Yaş: " + myReader["age"].ToString() + " Randevu Saati: " + myReader["apptime"].ToString() + " Hastalık: " + myReader["sickness"].ToString() + " Ek Not: " + myReader["eknot"].ToString()); 

        } 
       } 

Как я могу правильно провести сравнение? любая помощь?

+0

Какая ошибка в точности? На какой линии? Каковы ваши переменные? И почему вы сохраняете значения 'DateTime' со своими строковыми представлениями? Это плохой подход. Используйте свой 'dtpappdate.Value', когда вы вставляете свое значение, а не строковое представление. –

+0

Почему вы используете строки вообще? Если это дата в базе данных, просто используйте 'DateTime' везде. Не называть 'ToShortDateString' на' dtappdate.Value'. Включите 'myReader [" appdate "]' to 'DateTime' вместо того, чтобы преобразовать его в строку и обратно. –

+0

Дополнительная информация: Невозможно преобразовать значение даты и времени MySQL в System.DateTime, это ошибка, которую я получаю – Licentia

ответ

0

Вы сравниваете дату DateTime.Now == Дата dtetime из базы данных MySQL. Вероятно, это вряд ли будет истинным, за исключением чистой немой удачи, поскольку DateTime.Now включает текущее время до отметки.

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

0

Вам не следует преобразовывать даты в строку для сравнения. Если вы хотите сравнить даты часть DateTime, использование Дата собственности, напр:

var appDate = myReader["appdate"] as Datetime; 
if (appDate.Date == Datetime.Now.Date) { 
    // Your code goes here 
} 

Это также хорошая практика, чтобы сохранить даты в БД в формате UTC. Таким образом, вам не нужно беспокоиться о часовых поясах и летней экономии времени.

Смежные вопросы