如何在DataGridView2中按DateIN和HourIN筛选今日到店人员
解决方案:筛选今日到店人员并绑定到DataGridView2
我来帮你搞定这个需求,结合你的数据库结构和VB.NET代码,一步步来实现:
核心思路
你的表把日期和时间拆成了DateIN(日期)和HourIN(时间)两个字段,所以首先要把这两个字段合并成完整的DateTime值,然后筛选出**今日(当前自然日)**的到店记录,最后把结果绑定到DataGridView2上。
关键SQL查询语句
在SQL Server中,Date和Time类型可以直接相加得到完整的DateTime,我们用这个特性来精准筛选今日的记录:
SELECT Id, FirstName, Phone, DateOut, HourOut, DateIN, HourIN FROM TableOberge -- 合并DateIN和HourIN为完整DateTime,判断是否在今日00:00到明日00:00之间 WHERE CAST(DateIN AS DATETIME) + CAST(HourIN AS DATETIME) >= CAST(GETDATE() AS DATE) AND CAST(DateIN AS DATETIME) + CAST(HourIN AS DATETIME) < DATEADD(DAY, 1, CAST(GETDATE() AS DATE))
这个查询会精准匹配所有今日到店的人员,不会漏掉凌晨的记录,也不会包含昨日的晚班记录。
完整的VB.NET代码实现
把你写了一半的Form1_Load事件补充完整,注意用Using语句管理数据库资源,避免内存泄漏:
Imports System.Data.SqlClient Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 替换成你的实际数据库连接字符串 Dim connString As String = "Data Source=你的SQL服务器名;Initial Catalog=DataOberge;Integrated Security=True;" ' 构建筛选今日到店人员的SQL语句 Dim sqlQuery As String = "SELECT Id, FirstName, Phone, DateOut, HourOut, DateIN, HourIN " & "FROM TableOberge " & "WHERE CAST(DateIN AS DATETIME) + CAST(HourIN AS DATETIME) >= CAST(GETDATE() AS DATE) " & "AND CAST(DateIN AS DATETIME) + CAST(HourIN AS DATETIME) < DATEADD(DAY, 1, CAST(GETDATE() AS DATE))" ' 使用Using语句自动释放数据库资源 Using sqlConn As New SqlConnection(connString) Using sqlCmd As New SqlCommand(sqlQuery, sqlConn) Try sqlConn.Open() ' 用SqlDataAdapter填充DataTable Dim dataAdapter As New SqlDataAdapter(sqlCmd) Dim resultTable As New DataTable() dataAdapter.Fill(resultTable) ' 将结果绑定到DataGridView2 DataGridView2.DataSource = resultTable ' 可选:自定义列标题,提升用户体验 DataGridView2.Columns("Id").HeaderText = "编号" DataGridView2.Columns("FirstName").HeaderText = "姓名" DataGridView2.Columns("Phone").HeaderText = "联系电话" DataGridView2.Columns("DateOut").HeaderText = "离店日期" DataGridView2.Columns("HourOut").HeaderText = "离店时间" DataGridView2.Columns("DateIN").HeaderText = "到店日期" DataGridView2.Columns("HourIN").HeaderText = "到店时间" Catch ex As Exception ' 捕获并显示错误信息 MessageBox.Show("加载数据失败:" & ex.Message, "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Using End Using End Sub
重要注意事项
- 连接字符串替换:一定要把
connString里的服务器名、认证方式改成你自己的数据库配置(如果用SQL账号登录,要加上User ID=xxx;Password=xxx;) - SQL注入防护:如果之后需要动态筛选其他日期,一定要用参数化查询(比如
sqlCmd.Parameters.AddWithValue("@TargetDate", targetDate)),不要直接拼接字符串 - 数据库兼容性:如果你的数据库不是SQL Server,日期合并语法会有差异(比如MySQL用
STR_TO_DATE(CONCAT(DateIN, ' ', HourIN), '%Y-%m-%d %H:%i:%s'))
内容的提问来源于stack exchange,提问作者ABIDINE
相关产品推荐
相关产品推荐

