访问 asp.net 中的日期时出错
本文关键字:日期 出错 asp net 访问 | 更新日期: 2023-09-27 18:30:27
DateTime startDate = DateTime.ParseExact(txtstart.Text, "yyyyMMdd", null);
DateTime endDate = DateTime.ParseExact(txtend.Text, "yyyyMMdd", null);
SqlDataAdapter adapter = new SqlDataAdapter(
"select * from Membership_det where updateDate between "+
startDate.ToString() + " and "+ endDate.ToString() +" ", con);
它给出错误:
字符串未被识别为有效的日期时间。在 中输入日期时 月/日/年格式
嗯,
是的 - 你明确指定要以yyyyMMdd
格式解析它。我不明白如果您实际上以MM/dd/yyyy
格式指定了它,为什么您会期望它起作用。如果要改为处理它,请更改解析代码:
DateTime startDate = DateTime.ParseExact(txtstart.Text, "MM/dd/yyyy",
CultureInfo.InvariantCulture);
DateTime endDate = DateTime.ParseExact(txtend.Text, "MM/dd/yyyy",
CultureInfo.InvariantCulture);
然而:
- 如果这是解析用户输入,则应改用
DateTime.TryParseExact
,以便可以在正常流中检测输入中的错误,而不是使用异常。 - 这段代码非常以美国为中心;非美国用户可能会发现它令人困惑。通常,最好使用标准日期格式(和用户的区域性)之一,甚至最好使用某种形式的日期选取器控件,以避免整个文本格式问题。
接下来,您将直接在 SQL 语句中使用这些值。别这样。始终、始终、始终使用参数化 SQL:
SqlDataAdapter adapter = new SqlDataAdapter(
"select * from Membership_det where updateDate between @Start and @End",
con);
adapter.SelectCommand.Parameters.Add("@Start", SqlDbType.Date).Value = startDate;
adapter.SelectCommand.Parameters.Add("@End", SqlDbType.Date).Value = endDate;
(或者先创建命令,然后将其传递给适配器。
使用参数化 SQL 有三个好处:
- 它避免了SQL注入攻击
- 它避免了数据转换问题(在日期中很常见)
- 它通过将代码与数据分开来使您的 SQL 易于阅读
仅访问数据库
DateTime startDate = DateTime.ParseExact(txtstart.Text, "MMddyyyy", null);
DateTime endDate = DateTime.ParseExact(txtend.Text, "MMddyyyy", null);
SqlDataAdapter adapter = new SqlDataAdapter(
"select * from Membership_det where format( updateDate,'MM/dd/yyyy') between '"+
startDate.ToString("MM/dd/yyyy") + "' and '"+ endDate.Tostring("MM/dd/yyyy") +"' ", con);
SQL 服务器
DateTime startDate = DateTime.ParseExact(txtstart.Text, "MMddyyyy", null);
DateTime endDate = DateTime.ParseExact(txtend.Text, "MMddyyyy", null);
SqlDataAdapter adapter = new SqlDataAdapter(
"select * from Membership_det where Convert(varchar(15), updateDate,106) between '"+
startDate.ToString(dd MMM yyyy) + "' and '"+ endDate.Tostring(dd MMM yyyy) +"' ", con);