将系统日期与 SQL 中的日期字段进行比较

本文关键字:日期 字段 比较 系统 SQL | 更新日期: 2023-09-27 18:31:04

我正在尝试将SQL Server中的日期记录与系统日期进行比较。在我的示例中,用户首先使用他的姓名和出生日期进行注册,然后将其存储在数据库中。用户仅使用其姓名登录 Web 应用程序。登录后,他的名字会显示在"Welcome "player name"使用Sessions"的一侧。

除了他的名字之外,我试图显示的是一条消息,如果他的出生日期与系统日期匹配,则说"生日快乐"。我尝试过使用System.DateTime.Now,但我认为它也在比较年份,而我真正想要的只是日期和月份。我真的很感激任何建议或帮助。

登录页面中的代码:

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; 

将系统日期与 SQL 中的日期字段进行比较

您可以替换代码片段以将上面的日期与此日期进行比较

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";
  }
}

使用 ExecuteScalar 而不是 ExecuteNonQuery() 和 ExecuteReader()。如果数据库中D_O_B列是日期时间,则可以将结果转换为日期时间。如果D_O_B列是varchar(或类似的东西),则必须使用DateTime.Parse()将字符串转换为DateTime。然后只需比较日期时间实例的日和月部分:

DateTime DOB = (DateTime)cmd2.ExecuteScalar();
DateTime Today = DateTime.Now;
if (Today.Month == DOB.Month && Today.Day == DOB.Day)
{
    //Happy Birthday
}

两种方法,在sql中,您可以使用附加的页面作为参考在月份和日期之间进行日期比较

SQL日期比较(对于你想要做的事情来说很糟糕)

2)您可以将传入的字符串强制转换为日期时间,并更好地将System.datetime.month和System.datetime.day与SQL C#中转换的datetime进行比较

我会选择做第 2 种方式