2016-06-20 2 views
0

私は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を取得します。私はそれがデータベースからヌルを取得するためだと思うが、それはほとんどすべての日付が予定を持っているので正しくはない。

+0

クエリを作成するために文字列を連結しないでください。この方法ではSQLインジェクションの脆弱性があります。 – Arperum

+0

IDと日付はユーザーによって入力されませんが、クリックに基づいているため注入は問題ありません。 –

+0

私はまだ連結の代わりにパラメータを使用したいと思います。明確にするためだけの場合。 – Arperum

答えて

1

デフォルトの.ToString()がオブジェクトに対して呼び出される結果になる文字列でC#DateTimeオブジェクトを連結しているためです。これは、それが返される形式で実行されているpc /サーバーのカルチャに依存します。

MySQLの形式はYYYY-MM-DD HH:MM:SSなので、これはおそらく異なりますので一致しません。 datum.ToString("yyyy-MM-dd HH:mm:ss")に電話する必要があります。

あなたの小切手は、秒までの日付が一致するかどうかをチェックすることを覚えておいてください。日付部分のみをチェックしたいと思うかもしれません。

+0

私はちょうどそれが実際に見つかりました、データベースの私のフォーマットはyyyy-MM-ddです.HH:mm:ssですが、私のデータ変数は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のdatetimeを日付部分に変換する必要があります。これは、時刻部分を無視するためです。 – Arperum

関連する問題