C#根据DateTime值和id从数据库中获取约会

时间:2016-06-20 09:16:19

标签: c# mysql datetime nullreferenceexception

我在WinForm上有一个月份日历。当用户点击日期时,我想检查该用户在他点击的那天是否存在约会,然后显示一些信息。我使用MySql连接器在MySql数据库中检查此信息。我目前在表格Gebruiker_has_Afspraak中查看与用户ID对应的约会ID,然后在Afspraak表格中检查与Monthcalendar上点击的日期相同的日期。如果它是相同的,它将返回约会的位置(将来更多信息)。

我有这段代码:

 public List<string> checkAfspraakDate(DateTime datum, string type, string id)
    {
        List<string> result = new List<string>();
        List<string> result1 = new List<string>();
        if (this.openConnection() == true)
        {
            //Afspraak_id ophalen uit Gebruiker_has_afspraak
            string query = "SELECT Afspraak_id FROM Gebruiker_has_Afspraak WHERE Gebruiker_id = '" + id + "' ";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.CommandType = CommandType.Text;
            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
              while (reader.Read())
              {
                result.Add(reader.GetString(0));
              }

              reader.Close();
            }
            cmd.Cancel();
            //Afspraak gegevens uit table halen | Gebaseerd op Afspraak_id^ en datum_today
            foreach (string item in result)
            {
                query = "SELECT afspraak_locatie FROM Afspraak WHERE id = '" + item + "' AND datum = '" + datum +"'";
                MySqlCommand cmd1 = new MySqlCommand(query, connection);
                cmd1.CommandType = CommandType.Text;
                using (MySqlDataReader reader1 = cmd1.ExecuteReader())
                {
                    while (reader1.Read())
                    {
                        result1.Add(reader1.GetString(0));
                    }

                    reader1.Close();
                }
                cmd1.Cancel();
            }
            return result1;

        }
        else
        {
            return result;
        }
    }

如果当前用户ID与表中的用户ID匹配,则第一个代码将从表'Gebruiker_has_Afspraak'中提取'Afspraak_id'。

然后'Afspraak_id'将用于检查'Afspraak'表中的约会,其中Date ==月历上点击的日期。

我目前正在尝试将DateTime对象与数据库中的日期进行比较,因为数据库中的日期存储为日期时间值。 我也尝试过一个字符串,但也没用。我在'while(reader1.Read())'部分得到一个system.NullReferenceException。我认为这是因为我从数据库中得到一个null,但这不对,因为几乎所有日期都有约会。

1 个答案:

答案 0 :(得分:1)

由于您将C#DateTime对象与一个字符串连接在一起,该字符串将导致在对象上调用默认的.ToString()。这取决于它所运行的pc /服务器的文化格式,以及返回它的格式。

由于MySQL的格式为YYYY-MM-DD HH:MM:SS,因此可能会有所不同,因此不会产生匹配。您需要致电datum.ToString("yyyy-MM-dd HH:mm:ss")

请注意,您的支票还会检查秒数之前的日期是否匹配,您可能只想检查日期部分。