这是我的第一篇文章,所以请保持温柔:)
我正在为我的大学项目进行自动注册。我使用RFID扫描仪扫描学生ID标签和Access中创建的数据库。我使用C#和dataGridView来显示我的数据库表。
我正在尝试编写一个SQL查询,它将为每个扫描的tagID返回当前的sessionID,方法是将DB中保存的日期/时间与当前日期/时间进行比较。我的问题是:我该怎么办?我搜索了我的问题,但找不到我要找的答案(可能是因为我的表格结构复杂)。也许你能够提供帮助。
我的表格结构如下:
Student
fields Name -> Data type
=========================
(PK) tagID -> number
studentID -> text
(FK) courseID -> number
studentName -> text
Course
=========================
(PK) courseID -> number
courseName -> text
CourseModule
=========================
(FK) courseID -> number
(FK) moduleID -> text
Module
=========================
(PK) moduleID -> text
courseName -> text
ModuleSession
=========================
(FK) moduleID -> text
(FK) sessionID -> text
Session
=========================
(PK) sessionID -> text
sessionStartDate -> date
sessionTimeStart -> time
sessionTimeEnd -> time
Attendance
=========================
(FK) tagID -> number
(FK) sessionID -> text
(FK) scanningTime -> date/time
答案 0 :(得分:0)
我不确定你想要什么。这是一个使用c#查询的基本数据库。
使用DataAdapters使用SQL查询填充DataTable。
using (SqlConnection conn = Connection)
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"SELECT *
FROM [Your Tables]
WHERE TagID = @TagID";
cmd.Parameters.Add(new SqlParameter("@TagID", SqlDbType.UniqueIdentifier) { Value = variableName});
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "datatablename");
return dataSet.Tables["datatablename"];
}
}
}
然后,您可以通过循环或使用Lambda函数
从DataTable中获取值或者您可以使用GridView属性
将DataTable绑定到GridView你想用DataTable做什么我不确定。
答案 1 :(得分:0)
如果可能,请更改您的会话开始&结束时间是一个完整的日期时间,因为使用3个字段来指定开始/结束时间使查询非常复杂。 如果您引入此更改,并且我已正确理解您的需求,此查询将返回您需要的结果:
SELECT s.sessionID
FROM Attendance a
INNER JOIN Session s ON a.sessionID = s.sessionID
WHERE a.scanningTime BETWEEN s.sessionTimeStart AND s.sessionTimeEnd
如果你不想改变字段,那么你需要构建一个开始&可以在查询中使用的结束日期时间
EDIT 经过一些检查后,使用DATEADD的查询将无法正常工作。如果您仍想使用3个字段,这应该有效:
WHERE a.scanningTime BETWEEN (s.sessionStartDate + s.sessionTimeStart) AND (s.sessionStartDate + s.sessionTimeEnd)
但是条件是:sessionStartDate列的Time部分始终为零 您可以通过为您的字段使用“Date”SQL类型来强制执行此操作(仅适用于Sql server 2008或更高版本)
请注意我直接输入了查询,但我没有测试语法是否完全正确。