我正在尝试将SQL Server中的日期记录与系统日期进行比较。在我的例子中,用户首先注册他的姓名和出生日期,然后存储在数据库中。用户只使用他的名字登录Web应用程序。登录后,使用"Welcome "player name
将其名称显示在Sessions
“旁边。
如果他的出生日期与系统日期相符,我除了他的名字之外还要显示的是“生日快乐”的消息。我曾尝试与System.DateTime.Now
合作,但我认为它也是比较年份,而我真正想要的只是日期和月份。我真的很感激任何建议或帮助。
登录页面中的CODE:
protected void Button1_Click(object sender, EventArgs e)
{
String name = TextBox1.Text;
String date = System.DateTime.Today.ToShortDateString();
SqlConnection myconn2 = new
SqlConnection(ConfigurationManager.ConnectionStrings["User"].ToString());
SqlCommand cmd2 = new SqlCommand();
SqlDataReader reader;
myconn2.Open();
cmd2 = new SqlCommand("Select D_O_B from User WHERE Username = @username",
myconn2);
cmd2.Parameters.Add("@username", SqlDbType.NVarChar).Value = name;
cmd2.Connection = myconn2
cmd2.ExecuteNonQuery();
reader = cmd2.ExecuteReader();
while (reader.Read().ToString() == date)
{
Session["Birthday"] = "Happy Birthday";
}
}
注意:我在上面的代码中使用相同的阅读器,但这里的阅读器具有不同的连接。另外,reader.Read()
与reader.HasRows
不同?
Web应用程序页面中的代码:
string date = (string)(Session["Birthday"]); // Retrieving the session
Label6.Text = date;
答案 0 :(得分:1)
您可以替换代码片段以将上述日期与此日期进行比较
object dobVal = null;
while ((dobVal= reader.Read()) != null)
{
var storedDob = Convert.ToDateTime(dobVal.ToString());
if(storedDob.Month == DateTime.Now.Month &&
storedDob.Day == DateTime.Now.Day)
{
Session["Birthday"] = "Happy Birthday";
}
}
答案 1 :(得分:1)
使用ExecuteScalar代替ExecuteNonQuery()和ExecuteReader()。如果数据库中的D_O_B列是datetime,则可以将结果转换为DateTime。如果D_O_B列是varchar(或类似的东西),则必须使用DateTime.Parse()将字符串转换为DateTime。然后只比较DateTime实例的Day和Month部分:
DateTime DOB = (DateTime)cmd2.ExecuteScalar();
DateTime Today = DateTime.Now;
if (Today.Month == DOB.Month && Today.Day == DOB.Day)
{
//Happy Birthday
}
答案 2 :(得分:0)
有两种方法,在sql中,您可以使用附加页面作为参考,在月份和日期之间进行日期比较
sql date compare (bad way for what you want to do)
2)您可以将传入的字符串转换为日期时间并执行system.datetime.month和system.datetime.day与来自sql c# better way
的转换日期时间进行比较我会选择做第2号方式