如何在c#中查询数据集

时间:2013-05-08 15:15:22

标签: c# sql

这是我的第一篇文章,所以请保持温柔:)

我正在为我的大学项目进行自动注册。我使用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

2 个答案:

答案 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或更高版本)

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

相关问题