如何在c#中查询数据集
本文关键字:查询 数据集 | 更新日期: 2023-09-27 18:12:46
这是我的第一篇文章,所以请温柔一点:)
我正在为我的大学项目做自动注册。我使用RFID扫描仪扫描学生ID标签和在Access中创建的数据库。我使用c#和dataGridView来显示我的数据库表。
我试图写一个SQL查询,它将返回当前sessionID为每个扫描tagID,通过比较日期/时间保存在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
我不确定你到底想要什么。下面是一个使用c#的基本数据库查询。
使用数据适配器来填充SQL查询的数据表
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做什么我不确定
如果可能,请更改会话开始&结束时间必须是一个完整的日期时间,因为使用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
如果你不想改变字段,那么你需要构造一个start &可以在查询
中使用的结束日期时间编辑经过一些检查后,带有DATEADD的查询将无法工作。如果你仍然想使用这3个字段,这应该可以工作:
WHERE a.scanningTime BETWEEN (s.sessionStartDate + s.sessionTimeStart) AND (s.sessionStartDate + s.sessionTimeEnd)
但是有一个条件:你的sessionStartDate列的Time部分总是0。
你可以在字段中使用"Date" SQL类型(仅适用于SQL server 2008或更高版本)
请注意,我直接输入了查询,我没有测试语法是否完全正确。