2013-05-08 64 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