私はWinFormに月間カレンダーを持っています。ユーザーが日付をクリックすると、彼がその日にそのユーザーの予定が存在するかどうかを確認したいと思っていました。 MySqlコネクターを使用して、この情報をMySqlデータベースでチェックします。私は現在、テーブルGebruiker_has_Afspraakに、ユーザーIDに対応するAppointment IDをチェックインし、Afspraakテーブルで、Monthcalendarでクリックされた日付と同じDateをチェックします。同じ場合は、予定の場所が返されます(将来はさらに詳しい情報)。C#DateTimeの値とIDに基づいてデータベースから予定を取得
私はこのコードを持っている:
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;
}
}
最初のコードは、テーブルから「Afspraak_idを」抽出する「Gebruiker_has_Afspraak」現在のユーザIDがテーブルのユーザIDと一致する場合。
'Afspraak_id'は、 'Afspraak'テーブルの予定を確認するために使用されます。ここで、日付==月のカレンダーのクリックされた日です。
現在、データベースの日付がdatetime値として格納されているため、DateTimeオブジェクトとデータベースの日付を比較しようとしています。 また、文字列で試してみましたが、うまくいきませんでした。私は 'while(reader1.Read())'部分でsystem.NullReferenceExceptionを取得します。私はそれがデータベースからヌルを取得するためだと思うが、それはほとんどすべての日付が予定を持っているので正しくはない。
クエリを作成するために文字列を連結しないでください。この方法ではSQLインジェクションの脆弱性があります。 – Arperum
IDと日付はユーザーによって入力されませんが、クリックに基づいているため注入は問題ありません。 –
私はまだ連結の代わりにパラメータを使用したいと思います。明確にするためだけの場合。 – Arperum