【发布时间】:2020-02-26 05:07:20
【问题描述】:
这个查询没有返回任何值,也没有导致任何错误:
Dim cmdAs1 As String
Dim daAs1 As SqlClient.SqlDataAdapter
Dim dsAs1 As DataSet
Dim dtAs1 As DataTable
cmdAs1 = "SELECT * FROM [SN_Male_Quest_2018].[dbo].[Section_3] WHERE sub_village_id= '" & sub_village_id & "' and household_id= '" & household_id & "' and hrid= '" & male & "' and hrid= '" & female & "' and hrid= '" & adolscent & "' and hrid= '" & respid & "'"
daAs1 = New SqlClient.SqlDataAdapter(cmdAs1, cnn)
dtAs1 = New DataTable()
dsAs1 = New DataSet()
daAs1.Fill(dsAs1, "Section_3")
dtAs1 = dsAs1.Tables("Section_3")
lbloperator.Text = dtAs1.Rows.Count
If (dtAs1.Rows.Count.Equals(0)) Then
【问题讨论】:
-
SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看 Little Bobby Tables
-
如果结果集为空,则数据库中没有与过滤器匹配的记录。这里的所有都是它的。由于您甚至没有费心向我们展示过滤器是什么,您希望我们说什么?我敢打赌,您自己甚至都没有看过 SQL 代码。构建 SQL 代码的 VB 代码不是 SQL 代码。除此之外,不要使用字符串连接将值插入 SQL 代码。始终使用参数。这样您就可以避免各种问题,其中一个问题可能会导致这里出现问题。
-
顺便说一句,如果您想要的是
DataTable,那么只需创建一个DataTable。DataSet毫无意义。Fill方法将接受DataTable作为参数。另外,Fill方法返回检索到的记录数,因此无需单独测试DataTable的行数。最后,虽然使用.Equals(0)并没有错,但没有人这样做,因为当您可以使用更清晰的= 0时,这很愚蠢。 -
您应该检查您的
WHERE条件:and hrid= '" & male & "' and hrid= '" & female & "' and hrid= '" & adolscent & "' and hrid= '" & respid & "'"。不太可能匹配
标签: sql-server vb.net select