C# 根据 DateTime 值和 id 从数据库中获取约会
C# get appointment from database based on DateTime value and id
我的 WinForm 上有一个月历。当用户单击日期时,我想检查该用户在他单击的那天是否存在约会,然后显示一些信息。我使用 MySql 连接器在 MySql 数据库中检查此信息。我目前在 table Gebruiker_has_Afspraak 中检查与用户 ID 对应的约会 ID,然后在 Afspraak table 中检查与在 Monthcalendar 上单击的日期相同的日期。如果相同,它将 return 约会的位置(将来有更多信息)。
我有这个代码:
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 与 table 中的用户 ID 匹配,第一个代码将从 table 'Gebruiker_has_Afspraak' 中提取 'Afspraak_id'。
然后 'Afspraak_id' 将用于检查 'Afspraak' table 中的约会,其中日期 == 月历上单击的日期。
我目前正在尝试将 DateTime 对象与数据库中的日期进行比较,因为数据库中的日期存储为日期时间值。
我也用字符串尝试过,但也没有用。我在 'while(reader1.Read())' 部分得到了 system.NullReferenceException。我认为这是因为我从数据库中得到了一个空值,但这是不对的,因为几乎所有日期都有约会。
因为您将 C# DateTime 对象与字符串连接,这将导致在对象上调用默认值 .ToString()
。这取决于 pc/server 的文化,它 运行 返回的格式。
由于 MySQL 的格式为 YYYY-MM-DD HH:MM:SS
这可能会有所不同,因此不会导致匹配。您需要致电 datum.ToString("yyyy-MM-dd HH:mm:ss")
.
请记住,您的检查还将检查直到秒数的日期是否匹配,您可能只想检查日期部分。
我的 WinForm 上有一个月历。当用户单击日期时,我想检查该用户在他单击的那天是否存在约会,然后显示一些信息。我使用 MySql 连接器在 MySql 数据库中检查此信息。我目前在 table Gebruiker_has_Afspraak 中检查与用户 ID 对应的约会 ID,然后在 Afspraak table 中检查与在 Monthcalendar 上单击的日期相同的日期。如果相同,它将 return 约会的位置(将来有更多信息)。
我有这个代码:
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 与 table 中的用户 ID 匹配,第一个代码将从 table 'Gebruiker_has_Afspraak' 中提取 'Afspraak_id'。
然后 'Afspraak_id' 将用于检查 'Afspraak' table 中的约会,其中日期 == 月历上单击的日期。
我目前正在尝试将 DateTime 对象与数据库中的日期进行比较,因为数据库中的日期存储为日期时间值。 我也用字符串尝试过,但也没有用。我在 'while(reader1.Read())' 部分得到了 system.NullReferenceException。我认为这是因为我从数据库中得到了一个空值,但这是不对的,因为几乎所有日期都有约会。
因为您将 C# DateTime 对象与字符串连接,这将导致在对象上调用默认值 .ToString()
。这取决于 pc/server 的文化,它 运行 返回的格式。
由于 MySQL 的格式为 YYYY-MM-DD HH:MM:SS
这可能会有所不同,因此不会导致匹配。您需要致电 datum.ToString("yyyy-MM-dd HH:mm:ss")
.
请记住,您的检查还将检查直到秒数的日期是否匹配,您可能只想检查日期部分。