WinForm에 월 달력이 있습니다. 사용자가 날짜를 클릭하면 그 날짜에 해당 사용자에 대한 약속이 있는지 확인하고 싶습니다. 클릭 한 다음 몇 가지 정보를 표시합니다. MySql 커넥터를 사용하여 MySql 데이터베이스에서이 정보를 확인합니다. 나는 현재 Gebruiker_has_Afspraak 테이블에서 사용자 ID에 해당하는 약속 ID를 확인한 다음 Afspraak 테이블에서 Monthcalendar에서 클릭 한 날짜와 동일한 날짜를 확인합니다. 동일하면 약속 장소를 반환합니다 (앞으로 추가 정보). 현재 사용자 ID가 테이블에 사용자 ID에 일치하는 경우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;
}
}
이 첫 번째 코드는 테이블 'Gebruiker_has_Afspraak'에서 'Afspraak_id'을 추출합니다 :
나는이 코드를 가지고있다.
그런 다음 'Afspraak_id'는 'Afspraak'테이블에서 날짜 == 월 달력의 클릭 한 날짜에 대한 약속을 확인하는 데 사용됩니다.
현재 데이터베이스의 날짜가 datetime 값으로 저장되기 때문에 DateTime 개체를 데이터베이스의 날짜와 비교하려고합니다. 또한 문자열로 시도했지만 그 중 하나를 작동하지 않았다. 'while (reader1.Read())'부분에서 system.NullReferenceException이 발생합니다. 나는 그것이 거의 모든 날짜가 약속을 가지고 있기 때문에 내가 데이터베이스에서 null을 얻었지만 그것이 옳지 않다라고 생각한다.
문자열을 concantenate하여 쿼리를 작성하지 마십시오. 이렇게하면 SQL 삽입에 취약합니다. – Arperum
ID와 날짜는 사용자가 입력하지는 않지만 클릭에 기반하므로 주입은 여기에서 문제가되지 않습니다. –
여전히 연결 대신 매개 변수를 사용합니다. 명확성을 위해서만. – Arperum