提问人:Nnek Lecxe 提问时间:10/20/2023 更新时间:10/21/2023 访问量:55
vb.net 2 个日期选择器之间检索数据...索引超出了数组的边界
vb.net retrieving data between 2 datepicker ... index was outside the bounds of the array
问:
我哪里做错了?如何在 2 个日期之间提取数据
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
conn.Open()
Dim cmd As New MySqlCommand("select * from tblchecklist where check_date between #" & DateTimePicker1.Value & "# and #" & DateTimePicker2.Value & "#", conn)
dr = cmd.ExecuteReader
While dr.Read
DataGridView1.Rows.Add(dr.Item("ID"), dr.Item("check_corporate"), dr.Item("check_date"), dr.Item("check_num"), dr.Item("check_name"), dr.Item("check_memo"), dr.Item("check_amount"), dr.Item("check_group"), dr.Item("date_deposit"), dr.Item("date_release"), dr.Item("status"))
End While
dr.Dispose()
Catch ex As Exception
MsgBox(ex.Message)
End Try
conn.Close()
End Sub
答:
0赞
Michael Foster
10/20/2023
#1
编辑:结合安德鲁·莫蒂默(Andrew Mortimer)的评论,这些评论对于良好的编程实践是正确的。
我认为您收到错误是因为您使用的是日期的 VB 格式而不是 SQL 格式。尝试用以下代码替换您的行:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
conn.Open()
Using cmd As New MySqlCommand("select * from tblchecklist where check_date between @FirstDate and @SecondDate", conn)
cmd.Parameters.Add("@FirstDate", SqlDbType.Date).Value = DateTimePicker1.Value
cmd.Parameters.Add("@SecondDate", SqlDbType.Date).Value = DateTimePicker2.Value
Using dr As SqlDataReader = cmd.ExecuteReader
While dr.Read
DataGridView1.Rows.Add(dr.Item("ID"), dr.Item("check_corporate"), dr.Item("check_date"), dr.Item("check_num"), dr.Item("check_name"), dr.Item("check_memo"), dr.Item("check_amount"), dr.Item("check_group"), dr.Item("date_deposit"), dr.Item("date_release"), dr.Item("status"))
End While
End Using
End Using
Catch ex As Exception
MsgBox(ex)
End Try
conn.Close()
End Sub
SQL 希望单引号作为字符串/日期分隔符,但如果您使用参数,则根本不需要任何东西。
如果这不起作用,则需要提供实际导致错误的语句。这将在堆栈跟踪中,这就是为什么我也将 更改为整体显示。如果错误出现在添加到数据网格的行上,则 SQL 列名称或指定的列名称中可能有拼写错误。MsgBox
ex
Item
否则,我们需要更多的信息才能缩小范围。
评论
0赞
Nnek Lecxe
10/20/2023
尝试了您的代码,但似乎什么也没做。什么也没发生,也没有弹出错误
0赞
Michael Foster
10/21/2023
@NnekLecxe,我修改了我的答案,这改变了它。
0赞
Nnek Lecxe
10/21/2023
它说“System.ArgumentException:'参数'提示'无法转换为类型'String'。对不起,我不是很精通mysql查询,参数等...
0赞
Michael Foster
10/23/2023
你能发布堆栈跟踪吗?我也需要知道发生错误的行号,但我没有行号,所以你必须把它翻译成哪一行。
0赞
Vector
10/26/2023
试试这个 使用 cmd 作为新的 MySqlCommand(“select * from tblchecklist where check_date between ( @FirstDate and @SecondDate”), conn) 也许将“and”更改为逗号
评论