2016-05-24 44 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。 –