我有这段代码来填充一个DataGridView ( DGV ),目标是只使用来自LinkTable的数据填充DGV,其中一个字段ytSiteType等于另一个表单上的全局变量集。变量是gvSLT,我已经测试过gvSLT是否使用正确的值访问新表单。
我通过向SQLiteDataReader例程添加一个If语句解决了这个问题。
我将张贴下面的代码与这两行失败的代码。
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语句失败”
发布于 2022-01-19 18:22:22
您的第一个示例失败了,因为如果ytSiteType是一个字符串类型的字段,则在不将其放入单引号的情况下连接gvSLT的值。
第二个示例失败了,因为在单引号中插入文字文本" gvSLT“,而不是gvSLT的值。
第三个例子,我不确定,但可能失败了,因为没有确切的“新闻”值的记录。
您应该始终使用参数来避免这些问题和其他问题,如SqlInjection、解析数值中的十进制分隔符以及如果输入gvSLT包含一个或多个单引号的问题。
因此,一个简单的解决办法应该是:
cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = @site"
cmd.Parameters.Add("@site", DbType.String).Value = gvSLThttps://stackoverflow.com/questions/70775664
复制相似问题