2011-02-01 6 views
0

誕生日通知電子メールを送信するためのこのコードがあります。毎年1回目以外のすべての日付で正常に実行されています。 1日に送信されるEメールは、実際にはデータベースに1日であっても31日に送信されます。また、変数は1日ではなく31日であると読んでいます。 コードは次のとおりです。コード実行日1日月31日jan DateTime.Add

DateTime now = DateTime.Now.AddDays(1); 

あなたは来年の日付を見ている12月31日に意味:

public void birthdayReminder(string month) 
{ 
    try 
    { 

     SqlConnection con; 
     SqlCommand cmdReminder; 
     SqlDataReader userReminder; 
     bool result = false; 

     string todaydate = ""; 
     DateTime now = DateTime.Now.AddDays(1); 
     todaydate = now.ToString("dd", CultureInfo.InvariantCulture); 

     con = new SqlConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString); 
     con.Open(); 

     cmdReminder = con.CreateCommand(); 
     cmdReminder.CommandText = "select staffid, staffmonth, staffdate from tbstaff where staffmonth='" + month + "' and staffdate='" + todaydate + "' and staffcurrstatus='Active'"; 
     userReminder = cmdReminder.ExecuteReader(); 
     //userReminder.Read(); 
     result = userReminder.HasRows; 

     while (userReminder.Read()) 
     { 
      try 
      { 
       SqlConnection con1; 
       con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString); 
       con1.Open(); 

       SqlDataReader rdr; 
       SqlCommand cmdRemUpd = con1.CreateCommand(); 
       cmdRemUpd.CommandText = "select * from tbl_BirthdayReminder where staffid='" + userReminder.GetInt32(0) + "' and year='" + DateTime.Today.Year.ToString() + "'"; 
       rdr = cmdRemUpd.ExecuteReader(); 

       bool res = rdr.HasRows; 
       if(!res) 
        sendBirthdayEmail(userReminder.GetInt32(0)); 
       con1.Close(); 
      } 
      catch (Exception e1) { } 
     } 

     userReminder.Close(); 
     con.Close(); 
    } 
    catch (SqlException ex) { } 
} 

protected void sendBirthdayEmail(int id) 
{ 
    DataTable dt = new DataTable(); 

    try 
    { 
     SqlDataAdapter adp = new SqlDataAdapter("select * from tbstaff where staffid='" + id + "'", ConfigurationManager.ConnectionStrings["cs"].ConnectionString); 
     adp.Fill(dt); 

     string name=dt.Rows[0]["stafffname"].ToString()+' '+dt.Rows[0]["stafflname"].ToString(); 
     string acmng = dt.Rows[0]["staffacmng"].ToString(); 
     SqlConnection con; 
     SqlCommand cmd; 
     con = new SqlConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString); 
     con.Open(); 

     cmd = con.CreateCommand(); 
     cmd.CommandText = "select emailAddress from tbuser where firstName='" + acmng + "'"; 
     SqlDataReader dr = cmd.ExecuteReader(); 
     dr.Read(); 

     string to= dr.GetValue(0).ToString(); 
     con.Close(); 

     Configuration configurationFile = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~\\Web.config"); 
     MailSettingsSectionGroup mailSettings = configurationFile.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup; 

     string username = ""; 
     string password = ""; 
     string fromAddress = ""; 
     int port = 0; 
     string host = ""; 

     if (mailSettings != null) 
     { 
      port = mailSettings.Smtp.Network.Port; 
      host = mailSettings.Smtp.Network.Host; 
      password = mailSettings.Smtp.Network.Password; 
      username = mailSettings.Smtp.Network.UserName; 
      fromAddress = username; 
     } 
     string Aliasname = System.Configuration.ConfigurationManager.AppSettings["Alias"].ToString(); 

     string body = ""; 
     SmtpClient emailclient = new SmtpClient(); 
     string path = "http://www.columbuscorp.com/sat/images/happybirthday.jpg"; 
     body += "<html><body>"; 
     body += "Hello <br /><br />"; 
     body += "Please send birthday Card to " + name + " as his/her Birthday Date is on " + dt.Rows[0]["staffmonth"].ToString() + " " + dt.Rows[0]["staffdate"].ToString() + "<br/>"; 
     body +="<img src=" + path; 
     body += " width=672 height=491></img>"; 

     body += "<br /><br />Thanks from SAT Admin"; 
     body += "</body></html>"; 

     try 
     { 
      SqlConnection con1; 
      con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["cs"].ConnectionString); 
      con1.Open(); 

      SqlCommand cmdRemUpd = con1.CreateCommand(); 
      cmdRemUpd.CommandText = "insert into tbl_BirthdayReminder(staffid,year) values('" + id + "','" + DateTime.Today.Year.ToString() + "')"; 
      cmdRemUpd.ExecuteNonQuery(); 
      con1.Close(); 
     } 
     catch (Exception e1) { } 
+1

プロヒント:1)例外を捕まえて飲み込まないでください。キャッチすることなく、それらを処理するか、またはそれらを放置する。 2)['using'ステートメント(http://msdn.microsoft.com/en-us/library/yh598w02.aspx)を使用して、接続やデータリーダーなどのリソースが、例外があっても正しく閉じられるようにします。 –

答えて

2

あなたが見ている日付は、常に未来の1日です。それ - 一方で、これはあなたが実際に存在しないレコード(昨年の誕生日のリマインダー)ので、誕生日リマインダーは送信されませんを探している新しいもの

cmdRemUpd.CommandText = "select * from tbl_BirthdayReminder where staffid='" + userReminder.GetInt32(0) + "' and year='" + DateTime.Today.Year.ToString() + "'"; 

、「古い」年ません使用します。上記と同じ日付でなければなりません。

cmdRemUpd.CommandText = "select * from tbl_BirthdayReminder where staffid='" + userReminder.GetInt32(0) + "' and year='" + now.Year.ToString() + "'"; 
+1

うん、*悪い*命名の選択。今==明日。 –

関連する問題