如何在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#中查询数据集

我不确定你到底想要什么。下面是一个使用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或更高版本)

请注意,我直接输入了查询,我没有测试语法是否完全正确。