2016-06-20 2 views
0

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을 얻었지만 그것이 옳지 않다라고 생각한다.

+0

문자열을 concantenate하여 쿼리를 작성하지 마십시오. 이렇게하면 SQL 삽입에 취약합니다. – Arperum

+0

ID와 날짜는 사용자가 입력하지는 않지만 클릭에 기반하므로 주입은 여기에서 문제가되지 않습니다. –

+0

여전히 연결 대신 매개 변수를 사용합니다. 명확성을 위해서만. – Arperum

답변

1

개체에 기본값 .ToString()이 호출되게하는 문자열로 C# DateTime 개체를 연결했기 때문에. 이는 반환되는 형식에 대해 실행중인 pc/서버의 culture에 따라 다릅니다.

MySQL은 YYYY-MM-DD HH:MM:SS 형식이므로 이것은 다를 수 있으므로 일치하지 않습니다. datum.ToString("yyyy-MM-dd HH:mm:ss")으로 전화해야합니다.

수표가 일치하는 초까지 일치하는지 확인합니다. 날짜 부분 만 확인하고 싶을 것입니다.

+0

방금 ​​그 사실을 알았습니다. 데이터베이스의 형식이 yyyy-MM-dd HH : mm : ss이지만 datum 변수의 형식이 dd-MM-yyyy HH : mm : ss입니다. 구문 분석하거나 올바른 순서로 문자열을 지정할 수 있습니다. . 그러나 나는 하루 종일 확인하고 싶다. 그래서 만약 내가 시간 부분을 체크한다면, 시간과 분을 제외하면 내 데이터베이스가 그것을 받아 들일 것인가? –

+0

예 yyyy-MM-dd를 확인했지만 데이터베이스에 yyyy-MM-dd가 있는지 확인합니다. HH : mm : ss로 쿼리가 작동합니까? –

+0

@GertjanBrouwer [이 질문에] (http://stackoverflow.com/questions/10923264/how-to-select-from-a-datetime-column-using-only-a-date) 그 부분에 대답하십시오. 당신은 시간 부분을 무시하기 위해 날짜로 mysql 날짜/시간을 변환해야합니다 – Arperum

관련 문제