C# 代码执行日期1月1日1月31日日期时间。添加

C# 代码执行日期1月1日1月31日日期时间。添加,c#,C#,我有这个代码来发送生日提醒电子邮件。除每年1月1日外,每一天都将被处以罚款。将于1月1日发送的电子邮件实际上是在1月31日发送的,即使在数据库中是1月1日,变量也会将其读取为1月1日而不是1月31日。 代码是: 公共作废生日提醒(字符串月份) { 尝试 { SqlConnection-con; SqlCommand命令提醒; SqlDataReader用户提醒; 布尔结果=假; 字符串todaydate=“”; DateTime now=DateTime.now.AddDays(1); toda

我有这个代码来发送生日提醒电子邮件。除每年1月1日外,每一天都将被处以罚款。将于1月1日发送的电子邮件实际上是在1月31日发送的,即使在数据库中是1月1日,变量也会将其读取为1月1日而不是1月31日。 代码是:

公共作废生日提醒(字符串月份)
{
尝试
{
SqlConnection-con;
SqlCommand命令提醒;
SqlDataReader用户提醒;
布尔结果=假;
字符串todaydate=“”;
DateTime now=DateTime.now.AddDays(1);
todaydate=now.ToString(“dd”,CultureInfo.InvariantCulture);
con=新的SqlConnection(ConfigurationManager.ConnectionString[“cs”].ConnectionString);
con.Open();
cmdrementer=con.CreateCommand();
cmdrementer.CommandText=“从tbstaff中选择staffid、staffmonth、staffdate,其中staffmonth=”“+month+”,staffdate=”“+todaydate+”,staffcurrstatus='Active';
userrementer=cmdrementer.ExecuteReader();
//userremention.Read();
结果=userrementer.HasRows;
while(userrementer.Read())
{
尝试
{
sqlcon1;
con1=新的SqlConnection(ConfigurationManager.ConnectionString[“cs”].ConnectionString);
con1.Open();
SqlDataReader-rdr;
SqlCommand cmdRemUpd=con1.CreateCommand();
cmdRemUpd.CommandText=“从tbl_BirthdayReminder中选择*,其中staffid=”+userReminder.GetInt32(0)+”和year=”+DateTime.Today.year.ToString()+”;
rdr=cmdRemUpd.ExecuteReader();
bool res=rdr.HasRows;
如果(!res)
sendBirthdayEmail(userremention.GetInt32(0));
con1.Close();
}
捕获(异常e1){}
}
userrementer.Close();
con.Close();
}
catch(SqlException ex){}
}
受保护的void sendbirathdayemail(int-id)
{
DataTable dt=新的DataTable();
尝试
{
SqlDataAdapter adp=new SqlDataAdapter(“从tbstaff中选择*,其中staffid='”+id+“'”,ConfigurationManager.ConnectionString[“cs”].ConnectionString);
自动进料(dt);
字符串名称=dt.Rows[0][“stafffname”].ToString()+“”+dt.Rows[0][“stafflname”].ToString();
字符串acmng=dt.Rows[0][“staffacmng”].ToString();
SqlConnection-con;
SqlCommand命令cmd;
con=新的SqlConnection(ConfigurationManager.ConnectionString[“cs”].ConnectionString);
con.Open();
cmd=con.CreateCommand();
cmd.CommandText=“从tbuser中选择emailAddress,其中firstName=”+acmng+”;
SqlDataReader dr=cmd.ExecuteReader();
里德博士();
字符串to=dr.GetValue(0).ToString();
con.Close();
configurationFile=System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(“~\\Web.config”);
MailSettingsSectionGroup mailSettings=configurationFile.GetSectionGroup(“system.net/mailSettings”)作为MailSettingsSectionGroup;
字符串username=“”;
字符串密码=”;
字符串fromAddress=“”;
int端口=0;
字符串host=“”;
if(mailSettings!=null)
{
端口=mailSettings.Smtp.Network.port;
主机=mailSettings.Smtp.Network.host;
password=mailSettings.Smtp.Network.password;
用户名=mailSettings.Smtp.Network.username;
fromAddress=用户名;
}
字符串Aliasname=System.Configuration.ConfigurationManager.AppSettings[“Alias”].ToString();
字符串体=”;
SmtpClient emailclient=新SmtpClient();
字符串路径=”http://www.columbuscorp.com/sat/images/happybirthday.jpg";
正文+=”;
body+=“你好

”; body+=“请将生日卡发送给“+name+”,因为他/她的生日日期是“+dt.Rows[0][“staffmonth”].ToString()+”“+dt.Rows[0][“staffdate”].ToString()+”
”; 正文+=”; body+=“

感谢SAT管理员”; 正文+=”; 尝试 { sqlcon1; con1=新的SqlConnection(ConfigurationManager.ConnectionString[“cs”].ConnectionString); con1.Open(); SqlCommand cmdRemUpd=con1.CreateCommand(); cmdRemUpd.CommandText=“插入tbl_BirthdayReminder(staffid,year)值(“+id+”,“+DateTime.Today.year.ToString()+”)”; cmdRemUpd.ExecuteNonQuery(); con1.Close(); } 捕获(异常e1){}
您查看的日期始终是未来的一天:

DateTime now = DateTime.Now.AddDays(1);
这意味着12月31日是下一年的某个日期。另一方面,这将使用“旧”年,而不是新的一年

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)不要捕获和吞咽异常。要么处理它们,要么不捕获就让它们离开。2)使用确保连接和数据读取器等资源正确关闭,即使存在异常。是的,命名选择错误。现在==明天。
cmdRemUpd.CommandText = "select * from tbl_BirthdayReminder where staffid='" + userReminder.GetInt32(0) + "' and year='" + now.Year.ToString() + "'";