如何解决范围查询 ~ VB
尝试执行 OleDbCommand 以在 Excel 工作表中查找一行。每行在不同的单元格中都有一个低数和一个高数。没有行有重叠的数字。我没有得到任何结果或错误。虽然我知道我是一个行的范围。 205221 是工作表名称。 StartSerial 和 StopSerial 是列标题。我需要改用列字母吗?
***编辑:示例数据:
工作 | 描述 | StartSerial | StopSerial |
---|---|---|---|
55555 | 作业 1 | 44334 | 44897 |
55556 | 作业 2 | 44898 | 45001 |
55557 | 作业 3 | 45002 | 46001 |
comm = New OleDbCommand("SELECT * from [205221$] WHERE (StartSerial) <= " & serial & " AND (StopSerial) >= " & serial,conn)
Try
dr = comm.ExecuteReader
Catch ex As Exception
MsgBox(ex)
End Try
While dr.Read
Dim jobNum = dr("Job").ToString
Dim jobName = dr("Descript").ToString
TextBox1.AppendText(jobNum & " " & jobName)
End While
解决方法
尝试执行以下操作:
- 从列名中删除括号。如果要对列名进行转义,请使用方括号。
- 尝试转换 WHERE 子句中的列
- 使用参数化查询
看看这个例子:
Using cmd = New OleDbCommand("SELECT * from [205221$] WHERE CAST([StartSerial] AS INT) >= @0 AND CAST([StopSerial] AS INT) <= @0",conn)
cmd.Parameters.Add("@0",OleDbType.Integer).Value = serial
Dim reader = cmd.ExecuteReader()
While reader.Read()
' do something
End While
End Using
如果 serial
等于 44898
,那么它将返回示例数据集中的第二条记录。
我更新了@David 和@AndrewMorton 提供的内容。谢谢你的帮助。
Using cmd = New OleDbCommand("SELECT * from [205221$] WHERE [StartSerial] <= ? AND [StopSerial] >= ?",conn)
cmd.Parameters.Add("?",OleDbType.Integer).Value = serial
cmd.Parameters.Add("?",OleDbType.Integer).Value = serial
Dim reader = cmd.ExecuteReader()
While reader.Read()
Dim jobNum = reader("Job").ToString
Dim jobName = reader("Descript").ToString
TextBox1.AppendText(jobNum & " " & jobName)
End While
End Using
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。