首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vb.net select语句失败

vb.net select语句失败
EN

Stack Overflow用户
提问于 2022-01-19 18:07:05
回答 1查看 37关注 0票数 1

我有这段代码来填充一个DataGridView ( DGV ),目标是只使用来自LinkTable的数据填充DGV,其中一个字段ytSiteType等于另一个表单上的全局变量集。变量是gvSLT,我已经测试过gvSLT是否使用正确的值访问新表单。

我通过向SQLiteDataReader例程添加一个If语句解决了这个问题。

我将张贴下面的代码与这两行失败的代码。

代码语言:javascript
复制
 cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType =" & gvSLT
 cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = 'gvSLT'"

下面是正在工作的代码

代码语言:javascript
复制
        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语句失败”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-19 18:22:22

您的第一个示例失败了,因为如果ytSiteType是一个字符串类型的字段,则在不将其放入单引号的情况下连接gvSLT的值。

第二个示例失败了,因为在单引号中插入文字文本" gvSLT“,而不是gvSLT的值。

第三个例子,我不确定,但可能失败了,因为没有确切的“新闻”值的记录。

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

因此,一个简单的解决办法应该是:

代码语言:javascript
复制
cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = @site"
cmd.Parameters.Add("@site", DbType.String).Value = gvSLT
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70775664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档