2013-05-08 62 views
0

这是我的第一篇文章,所以请温柔:)如何查询c中的数据集#

我正在为我的大学项目自动注册。我使用RFID扫描仪扫描学生ID标签和Access中创建的数据库。我使用C#和dataGridView来显示我的数据库表。

我正在尝试编写一个SQL查询,它将通过用当前日期/时间保存在数据库中的日期/时间来返回每个扫描的tagID的当前sessionID。我的问题是:我该怎么做?我搜索了我的问题,但无法找到我正在寻找的答案(可能是由于我的表格结构复杂)。也许你会有帮助。

我的表结构如下:

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

如果你没有太多的经验,我建议你看看realtional数据库,看看它们是如何工作 – DiederikEEn 2013-05-08 15:18:09

+2

嗨,欢迎来到SO。这不是一个真正的问题,因为它没有证明你自己实际上已经尝试过这个问题了。社区通常不会对“为我编码”类型问题做出积极响应。建议您四处搜索,查找成千上万个SQL查询示例,自己尝试这个问题,然后回来一个更具体的问题。 – tnw 2013-05-08 15:18:24

+0

好,理解。我用了很多方法去做,但没有成功。我在Access中创建了一个类似的查询(获得给定tagID的所有sessionID),但是我需要的是将标签ID作为参数“传递”给查询(在标签被扫描后) – jaspernorth 2013-05-08 15:22:17

回答

0

我不知道你想要什么。这是一个用c#查询的基本数据库。

使用DataAdapter通过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函数

或者,您可以通过使用GridView控件的属性

你想要做什么的DataTable到你的GridView绑定从你的数据表值与DataTable我不知道。

+0

这是一个很好的例如,谢谢你。我想要做的是获取tagID的活动会话,将会话时间和日期与当前日期/时间进行比较,并将这些信息与扫描时间一起填充到出席表中。我使用DGV来显示我的表格。 – jaspernorth 2013-05-08 15:34:35

+0

那么你问的SQL查询?或者你想从DataTable中取出数据? – SpaceApple 2013-05-08 15:37:02

+0

说实话,我不完全确定我需要什么。我有一个填充数据的数据库,我需要在给定的时间范围内获取特定tagID的sessionID,所以我认为我需要SQL查询来检索这些数据... – jaspernorth 2013-05-08 15:40:29

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 

如果你不想改变字段,那么你就需要构建开始&结束日期时间可用于查询

编辑 经过一番检查后,使用DATEADD的查询将不起作用。如果你仍然想使用这3个字段这应该工作:

WHERE a.scanningTime BETWEEN (s.sessionStartDate + s.sessionTimeStart) AND (s.sessionStartDate + s.sessionTimeEnd) 

但有一个条件:您的sessionStartDate列的时间部分始终为零。
您可以通过使用“日期” SQL类型的字段(仅适用于SQL Server 2008或以上)

请注意,我直接输入的查询,如果语法是我没有测试这种强制完全正确。

+0

非常有用,非常感谢,只要我的代表= 15,就会给你投票:) – jaspernorth 2013-05-08 15:36:37

+0

我经过一些检查后更新了我的答案,因为我部分错误: ) – Fabske 2013-05-08 15:40:02