如何查询c中的数据集#
这是我的第一篇文章,所以请温柔:)如何查询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
我不知道你想要什么。这是一个用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我不知道。
这是一个很好的例如,谢谢你。我想要做的是获取tagID的活动会话,将会话时间和日期与当前日期/时间进行比较,并将这些信息与扫描时间一起填充到出席表中。我使用DGV来显示我的表格。 – jaspernorth 2013-05-08 15:34:35
那么你问的SQL查询?或者你想从DataTable中取出数据? – SpaceApple 2013-05-08 15:37:02
说实话,我不完全确定我需要什么。我有一个填充数据的数据库,我需要在给定的时间范围内获取特定tagID的sessionID,所以我认为我需要SQL查询来检索这些数据... – jaspernorth 2013-05-08 15:40:29
如果可能,请将您的会话开始更改为&结束时间为完整的日期时间,因为使用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或以上)
请注意,我直接输入的查询,如果语法是我没有测试这种强制完全正确。
非常有用,非常感谢,只要我的代表= 15,就会给你投票:) – jaspernorth 2013-05-08 15:36:37
我经过一些检查后更新了我的答案,因为我部分错误: ) – Fabske 2013-05-08 15:40:02
如果你没有太多的经验,我建议你看看realtional数据库,看看它们是如何工作 – DiederikEEn 2013-05-08 15:18:09
嗨,欢迎来到SO。这不是一个真正的问题,因为它没有证明你自己实际上已经尝试过这个问题了。社区通常不会对“为我编码”类型问题做出积极响应。建议您四处搜索,查找成千上万个SQL查询示例,自己尝试这个问题,然后回来一个更具体的问题。 – tnw 2013-05-08 15:18:24
好,理解。我用了很多方法去做,但没有成功。我在Access中创建了一个类似的查询(获得给定tagID的所有sessionID),但是我需要的是将标签ID作为参数“传递”给查询(在标签被扫描后) – jaspernorth 2013-05-08 15:22:17