You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET如何查询展示数据库中日期为当日的记录并统计行数

问题背景

需要统计SQL Server数据库APPOINT表中日期为当日的记录行数,原有VB.NET代码存在安全隐患与逻辑错误,无法稳定得到正确统计结果。

原有代码核心问题
  • 直接将日期变量拼接进SQL语句,存在SQL注入风险,且日期字符串格式受服务器区域设置影响,极易出现格式不匹配导致的SQL执行错误、统计结果偏差
  • 直接用等号匹配日期,若A_DATE字段为带时分秒的datetime类型,仅能匹配当日0点0分0秒的记录,会漏掉当日其余所有时段的数据
  • 未手动释放数据库连接、Command对象资源,频繁调用会耗尽数据库连接池,导致服务异常
正确实现代码
' 生产环境建议将连接字符串统一配置在web.config中,方便维护
Dim connectionString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\SUJAY GHOSH\Documents\Visual Studio 2010\WebSites\DateTest\App_Data\Database.mdf;Integrated Security=True;User Instance=True"
Dim todayAppointCount As Integer
Using con As New SqlConnection(connectionString)
    con.Open()
    Dim querySql As String = "SELECT COUNT(*) FROM APPOINT WHERE A_DATE >= @TodayStart AND A_DATE < @NextDayStart"
    Using cmd As New SqlCommand(querySql, con)
        ' 传入当日零点时间作为范围起点
        cmd.Parameters.AddWithValue("@TodayStart", DateTime.Today)
        ' 传入次日零点时间作为范围上限(不包含)
        cmd.Parameters.AddWithValue("@NextDayStart", DateTime.Today.AddDays(1))
        todayAppointCount = Convert.ToInt32(cmd.ExecuteScalar())
    End Using
End Using
Label2.Text = todayAppointCount.ToString()
关键优化说明
  • 采用参数化查询,从根源避免SQL注入问题,同时由框架自动处理日期类型的格式适配,无需手动拼接日期字符串,兼容不同服务器的时间格式配置
  • 采用时间区间匹配逻辑替代等号判断,无论A_DATE字段是纯date类型还是带时分秒的datetime类型,都能100%覆盖当日所有记录,不会出现漏统计
  • 通过Using块包裹数据库连接、命令对象,执行完成后自动释放非托管资源,避免数据库连接泄漏问题

内容的提问来源于stack exchange,提问作者Sujay Ghosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 22:39:12