c# - 在 C# / ASP.NET 中将 SQL Server DATETIME 与 DateTime.NOW 进行比较
问题描述
如何将 SQL ServerDATETIME
与DateTime.Now
值进行比较?如您所见,我将其分配给 Session 并尝试将其与DateTime.Now
.
string timestamp = @"SELECT sr.*, ud.* FROM SuspensionRecord sr, UserData ud WHERE sr.User_ID=@User_ID AND ud.User_ID=@User_ID";
using (SqlCommand cmd2 = new SqlCommand(timestamp, con))
{
cmd2.Parameters.AddWithValue("@User_ID", Session["UserID"].ToString());
using (SqlDataReader dr = cmd2.ExecuteReader())
{
if (dr.HasRows)
{
while (dr.Read())
{
Session["suspensiondate"] = dr["End_Date_Suspension"].ToString();
}
if (Convert.ToDateTime(Session["supensiondate"]) >= DateTime.Now.Date)
{
lblMessage.Text = "The account's status is suspended.";
lblMessage.Visible = true;
}
}
}
}
解决方案
- 您应该传入日期并在查询中而不是在 C# 中进行比较。那是少了一步。如果您确实想在 c# 中执行此操作,请使用适当的类型,不要将其转换
DateTime
为字符串,然后再将其转换回来。 - 查询中不需要连接(第二个表)
- 您不必为此使用 DataReader,您可以使用返回 1 值的ExecuteScalar 。
- 使用以便您可以使用SqlDbType
Add
指定正确的架构类型,而不是AddWithValue
string timestamp = @"SELECT 1 FROM SuspensionRecord sr WHERE sr.User_ID = @User_ID AND supensiondate > @now";
using (SqlCommand cmd2 = new SqlCommand(timestamp, con))
{
cmd2.Parameters.Add("@User_ID", SqlDbType.Int).Value = Session["UserID"]; // do not convert to string
cmd2.Parameters.Add("@now", SqlDbType.DateTime).Value = DateTime.Now.Date;
var result = cmd2.ExecuteScalar();
if(result != null) // if null then there were no records so account is not suspended
{
lblMessage.Text = "The account's status is suspended.";
lblMessage.Visible = true;
}
}
推荐阅读
- typescript - Typescript eslint 正在标记 'google' 没有为 google.maps.Marker[] 定义
- rcaller - 无法让 RCaller 工作,在 caller.runAndReturnResult 线上出现错误
- python - 如何从几乎一个嵌套列表中删除括号?
- reactjs - 使用 \public 文件夹中的强制内容作为反应中的 iframe 源
- python - python中的键盘模块对多处理做出奇怪的反应
- css - 隐藏 Blazor Progressive Web 应用的窗口标题/标题栏
- r - R将单元格的值转换为等效的行数以进行相关
- python - Plotly, streamlit: how to keep the fullscreen view
- ruby-on-rails - Bundler 找不到 gem "actionpack" 的兼容版本,已安装兼容的 actionpack
- html - 垂直反转按钮的阴影