vb.net select 语句失败

vb.net select statement failing

我有此代码来填充 DataGridView (DGV),目标是仅使用 LinkTable 中的数据填充 DGV,其中一个字段 ytSiteType 等于另一个表单上设置的全局变量。变量是 gvSLT,我已经测试过 gvSLT 以正确的值进入新表单。
我通过向 SQLiteDataReader 例程添加 If 语句解决了这个问题。
我将 post 下面的代码加上这两行失败的代码。

 cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType =" & gvSLT
 cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = 'gvSLT'"

这是有效的代码

        Using conn As New SQLiteConnection($"Data Source = '{gv_dbName}';Version=3;")
        conn.Open()

        Using cmd As New SQLiteCommand("", conn)

            cmd.CommandText = "SELECT * FROM LinkTable"
            'cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType =" & gvSLT
            'cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = 'gvSLT'"
            'cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = 'News'"

            Using rdr As SQLite.SQLiteDataReader = cmd.ExecuteReader
                'dgvLinks.DataSource = rdr
                'Statement Above use when DB is bound to dgvLinks
                '=================================================

                While rdr.Read()
                    intID = CInt((rdr("LID")))
                    strChannelName = rdr("ytChannelName").ToString
                    strLinkAddress = rdr("ytLinkAddress").ToString
                    strLinkType = rdr("ytSiteType").ToString
                    If strLinkType = gvSLT Then
                        dgvLinks.Rows.Add(intID, strChannelName, strLinkAddress)
                        rowCount = rowCount + 1
                    End If
                End While

            End Using

问题是“为什么注释掉的 SELECT 语句失败了”

你的第一个例子失败了,因为,如果 ytSiteType 是一个字符串类型的字段,你是在连接 gvSLT 的值而不把它放在一起在单引号内。

第二个示例失败,因为您将文字文本“gvSLT”放在单引号内,而不是 gvSLT.

的值

第三个例子,我不确定,但可能会失败,因为没有完全符合“News”值的记录。

如果输入 gvSLT 本身包含一个或多个单引号,您应该始终使用参数来避免这些问题和其他问题,例如 SqlInjection、解析数值中的小数点分隔符和问题。

所以一个简单的解决方案应该是:

cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = @site"
cmd.Parameters.Add("@site", DbType.String).Value = gvSLT