2016-05-24 64 views
1

我一直試圖顯示選定的數據從Access數據庫到datagridview上按下按鈕,但它不顯示任何記錄既不顯示任何錯誤。VB.NET:無法顯示選定的數據從訪問數據庫到datagridview

Dim third_da As OleDb.OleDbDataAdapter 
Dim third_ds As New DataSet 


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 


    con.Open() 
    Dim cb_two As New OleDb.OleDbCommandBuilder(third_da) 

    query_three = "SELECT emp_timing.emp_code, emp_timing.day, emp_timing.travel_time, emp_timing.travel_dest,emp_timing.emp_timein,emp_timing.emp_timeout, emp_timing.emp_hours, emp_timing.emp_mins " & _ 
     "FROM emp_timing WHERE (((emp_timing.emp_code)=" & empcode & ") AND ((emp_timing.day) Like '??/" & ComboBox1.Text & "/20" & TextBox9.Text & "'))" 

    ' "WHERE (((emp_timing.emp_code)=22) AND ((emp_timing.day) Like '??/05/2016'))" 

    third_da = New OleDb.OleDbDataAdapter(query_three, con) 

    third_da.Fill(third_ds, "ets") 


    DataGridView1.DataSource = third_ds.Tables("ets") 

    con.Close() 
    Dim view As New DataView(third_ds.Tables(0)) 
    source1.DataSource = view 
    DataGridView1.DataSource = view 

    DataGridView1.ReadOnly = True 
    DataGridView1.CancelEdit() 

End Sub 

在此先感謝!

+0

你設置斷點和步驟?同時使用參數並關閉Option Strict On。 – Codexer

+0

檢查您的查詢是否獲取數據? –

+0

您的代碼容易受到SQL注入[檢查bobby-tables.com的詳細信息](http://bobby-tables.com),請使用參數化查詢來防止此問題。你調試DId並檢查到底發生了什麼問題?數據庫連接了嗎? SQL是否正確生成?生成的SQL是否在Access中正確執行? – Spidey

回答

-1

你可以改變你emp_timing.day場的條件查詢是這樣的:

(Month(emp_timing.day) = & ComboBox1.Text & 
        and Year(emp_timing.day) = "20" & TextBox9.Text & ") 

不過,我建議你使用參數,以避免SQL注入,像這樣:

query_three = "SELECT emp_timing.emp_code, emp_timing.day, emp_timing.travel_time, emp_timing.travel_dest,emp_timing.emp_timein,emp_timing.emp_timeout, emp_timing.emp_hours, emp_timing.emp_mins " & 
"FROM emp_timing WHERE (((emp_timing.emp_code)= @empcode) AND ((emp_timing.day) BETWEEN @startDate AND @endDate))" 

Dim startDate As New DateTime("20" & TextBox9.Text, ComboBox1.Text, 1) 
Dim endDate As DateTime = startDate.AddMonths(1).AddDays(-1) 

Dim cmd As New OleDbCommand(query_three, con) 
cmd.Parameters.AddWithValue("@empcode", empcode) 
cmd.Parameters.AddWithValue("@startDate", startDate.ToString("#yyyy/MM/dd#")) 
cmd.Parameters.AddWithValue("@endDate", endDate.ToString("#yyyy/MM/dd#")) 
third_da = New OleDb.OleDbDataAdapter(cmd) 
+0

謝謝噸((emp_timing.emp_code)=「&empcode&」)AND(Month(emp_timing.day)=「&ComboBox1.Text&」以及年(emp_timing.day)= 20「&TextBox9.Text&」))「' –

+0

你能解釋一下爲什麼你在這裏寫下月份:'(Month(emp_timing.day)'和年份:'Year(emp_timing。日期)' –

+0

月份獲取月份和年份以獲取數據庫中的日期字段並將其與組合框和文本框中的值進行比較,因爲您想獲取所有月份中包含日期的記錄,例如05/2016。 –