【问题标题】:VB.NET: Cannot display selected data from access database into datagridviewVB.NET:无法将 access 数据库中的选定数据显示到 datagridview 中
【发布时间】:2016-05-24 11:53:46
【问题描述】:

我一直试图在按下按钮时将 Access 数据库中的选定数据显示到 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

提前致谢!

【问题讨论】:

  • 你设置断点并单步执行了吗?同时使用参数并打开 Option Strict。
  • 检查您的查询是否获得数据?
  • 您的代码容易受到 SQL 注入 check bobby-tables.com for details 的攻击,请使用参数化查询来防止这种情况。您是否调试并检查到底出了什么问题?数据库是否正在连接? SQL 是否正确生成?生成的 SQL 是否在 Access 中正确执行?
  • day 字段的类型是什么?
  • 我的查询在访问中运行良好,它可以获取数据。 @AbdellahOUMGHAR

标签: vb.net ms-access datagridview


【解决方案1】:

您可以像这样在查询中更改emp_timing.day 字段的条件:

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

但是,我建议你使用 Parameter 来避免 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)

【讨论】:

  • 感谢一吨兄弟终于成功了 :) 这是查询:"SELECT * FROM emp_timing WHERE (((emp_timing.emp_code)=" & empcode & ") AND (Month(emp_timing.day) =" & ComboBox1.Text & "and Year(emp_timing.day) = 20" & TextBox9.Text & " ))"
  • 你能解释一下为什么你在这个:(Month(emp_timing.day) 和年份:Year(emp_timing.day)
  • Month 获取月份和年份以获取数据库中日期字段的年份并将其与组合框和文本框中的值进行比较,因为您希望获取所有具有月份日期的记录,例如 05/2016。
  • 兄弟你真棒:))
  • 我很高兴听到这个消息!也谢谢你:)
猜你喜欢
  • 2018-01-24
  • 2015-05-17
  • 2023-03-28
  • 1970-01-01
  • 2021-10-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
相关资源
最近更新 更多