2017-01-05 4 views
0

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

Пока что он не совсем работает, я чувствую, что нахожусь на правильном пути, может кто-нибудь, пожалуйста, взгляните на мой код?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     try 
     { 
      DataTable dt = new DataTable(); 
      SqlDataAdapter sqlDA = new SqlDataAdapter("SELECT Time FROM dbo.Planner", connectionString); 
      sqlDA.Fill(dt); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.StoredProcedure; 



      List<string> Time = new List<string>(); 

      if (dt.Rows.Count >= 0) 
      { 
       foreach (DataRow item in dt.Rows) 
       { 
        Time.Add(item["Time"].ToString()); 
        Console.WriteLine(item[1]); 
       } 

       foreach (string item in Time) 
       { 
        if (item == DateTime.Now.ToString("HH:mm")) 
        { 
         MessageBox.Show("Test"); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 

    } 
+4

«Пока это не совсем работает». Разрабатывать. –

+0

'if (dt.Rows.Count> = 0)' также должно быть '> 0', иначе вы будете помещать пустые строки в свои циклы foreach'' .Count == 0'. –

+0

@ rory.ap Я не уверен, что код прав, я даже заполняю свой список данными из моей базы данных? и как мне сопоставить время проверки. – Croxino

ответ

1

Используя .ToString() метод объекта часто приведем результаты, которые мы рассмотрим как «совпадение», но компьютер не будет. Это рискованно, особенно если в базе данных есть заполненные поля или вы ищете «:», но поле действительно количество секунд или юлианская дата.

Вместо этого я рекомендую вам сравнить два объекта DateTime. Будем надеяться, что текст вы получаете обратно будет отбрасывать чисто:

foreach (string item in Time) 
      { 
       var n = Convert.ToDateTime(item); 
       if (n.ToString("HH:mm") == DateTime.Now.ToString("HH:mm")) 
       { 
        MessageBox.Show("Test"); 
       } 
      } 

Теперь у меня есть два объекта для сравнения, которые я могу обеспечить даете мне точный одинаковый формат строки для представления в час и минуту. Однако есть лучший способ сделать это.

if (n.Hour == DateTime.Now.Hour && n.Minute == DateTime.Now.Minute) 
       { 
        MessageBox.Show("Test"); 
       } 

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

+0

Это сработало !!!!! большое вам спасибо !, мне также нужно проверить дату, чтобы проверить время + дату. Не могли бы вы также помочь мне в этом? heres код, который я до сих пор на дату http://pastebin.com/KxtqHp1E – Croxino

+0

DateTime имеет всевозможные методы для такого рода вещей. Вы можете использовать .Day, .Month, .Year и т. Д. Я думаю, что путь для вас будет использоваться: DateTime.ToShortDateString(); Это сравнение строк, но поскольку это будет происходить из двух объектов datetime, использующих один и тот же метод, все в порядке. Если вы хотите сравнить даты и время в одной и той же операции, просто сравните DateTime n с DateTime.Now без использования каких-либо свойств. – CDove

0

Я думаю, что что-то подобное будет соответствовать (импорт System.Data.Linq), запуск проверки каждые минут (в отношении к точности необходимо):

public IEnumerable<DateTime> DateTimes() 
    { 
     using(DataContext dc = new DataContext("constring")) 
     { 
      return dc.ExecuteQuery<DateTime>("SELECT Time FROM dbo.Planner"); 
     } 
    } 

    public void Check() 
    { 
     foreach(var dateTime in DateTimes()) 
     { 
      if(dateTime.Minute==DateTime.Now.Minute && dateTime.Hour == DateTime.Now.Hour) 
      { 
       MessageBox.Show("Notification"); 
      } 
     } 
    } 
+1

Что это за ответ? –

+0

Что не так с этим ответом? (Я стараюсь быть конструктивным, а не вопросом о троллинге) – Creep

+0

Что не так с этим ответом, так это то, что мы даже не знаем, что спрашивает OP, так как мы можем ответить на него? Это не общий сайт обзора кода; должна присутствовать * проблема *, для которой мы могли бы помочь. –

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