2017-01-05 53 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我不确定代码是否正确,我甚至用我的数据库中的数据填充我的List?以及如何进行检查时间的比较。 – Croxino

回答

1

使用对象的.ToString()方法往往能目前的结果,我们会认为是“匹配”,但电脑不会。这是有风险的,特别是如果数据库填充了字段,或者您正在查找“:”,但该字段实际上是一个秒计数或是Julian日期。

相反,我建议您比较两个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

这工作!!!!!非常感谢你!我还需要检查日期,以便检查时间+日期。你能帮我解决这个问题吗?继承人迄今为止的日期代码http://pastebin.com/KxtqHp1E – Croxino

+0

DateTime有这种事情的各种方法。你可以使用.Day,.Month,.Year等。我认为你的方法是使用:DateTime.ToShortDateString();这是一个字符串比较,但由于它使用相同的方法来自两个日期时间对象,所以很好。如果您想比较同一操作中的日期和时间,只需比较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

这个答案有什么问题? (我试图建设性的,而不是一个trolling的问题) – Creep

+0

这个答案有什么问题是我们甚至不知道OP在问什么,所以我们如何回答它?这不是一个通用代码审查网站;我们可能会提供帮助的问题必定存在。 –