2010-02-23 35 views
2

我有一個包含兩個時間列的表。一種是登錄時間,一種是註銷時間。我希望能夠在兩者之間進行過濾,基本上大於最小選擇和小於所選最大值。我正在使用每月的日曆來獲得時間跨度,但它無法正常工作。從那裏我想將表格中的4列添加到gridview。在DB的日期是在以下格式:通過vb.net中的正確時間跨度過濾SQL

2/23/2010 11:17:01 AM

我知道如何從表中單一的元素,或列而不是整個行。

所以我想我有2個問題,得到的SQL正確的過濾器,然後將結果綁定到表。

這是到目前爲止我的代碼:

Dim cn As OleDbConnection 
    Dim cmd As OleDbCommand 
    Dim str As String 
    Dim dr As OleDbDataReader 
    Dim date1 As Date 
    Dim date2 As Date 


    If (Not SubmitNewToDB(session)) Then 
     MsgBox("error") 
    End If 
    Try 
     cn = New OleDbConnection("Provider=microsoft.Jet.OLEDB.4.0;Data Source=G:\Sean\BMSBonder3_0.mdb;") 
     cn.Open() 
     str = "Select BonderIdentifier, UserName, Login, Logout From [Session] Where (Login < " & MonthCalendar1.SelectionEnd _ 
      & " AND Logout > " & MonthCalendar1.SelectionStart & ") AND BonderIdentifier = " & session.bonderIdentifier 

     cmd = New OleDbCommand(str, cn) 
     dr = cmd.ExecuteReader 

     While dr.Read() 
      If dr.Item(0).ToString <> "" Then 
       DataGridView1.Rows.Add(dr.Item(0)) 
      End If 
     End While 
     dr.Close() 
     cn.Close() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

編輯

SLaks已經回答了我的大部分問題,一個問題仍然存在。我需要弄清楚如何製作它,以便monthcalendar只選擇一天並返回那些日期值。似乎時間是一個問題,因爲它如上所述在數據庫中。僅僅比較日期是不夠的。

不知道如何調整日期以包含時間。

回答

2

您應該使用的參數,如:

str = "Select BonderIdentifier, UserName, Login, Logout From [Session] Where Login >= ? AND Login <= ? AND BonderIdentifier = ?" 

cmd = New OleDbCommand(str, cn) 
cmd.Parameters.AddWithValue("Start", MonthCalendar1.SelectionStart 
cmd.Parameters.AddWithValue("End", MonthCalendar1.SelectionEnd) 
cmd.Parameters.AddWithValue("BID", session.bonderIdentifier) 

要爲四列中添加值,你可以寫

DataGridView1.Rows.Add(dr.Item(0), dr.Item(1), dr.Item(2), dr.Item(3)) 
+0

OleDb的需求定購?用於參數佔位符而不是名爲@parameters。 – 2010-02-23 23:43:25

+0

謝謝,但我的過濾器仍然無法正常工作。 – 2010-02-23 23:44:27

+1

我編輯了答案;現在就試試。 – SLaks 2010-02-23 23:47:19