[英]vb.net select statement failing
我有此代碼來填充 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 語句失敗”
您的第一個示例失敗,因為如果ytSiteType是字符串類型的字段,則您正在連接gvSLT的值而不將其放在單引號內。
第二個示例失敗,因為您將文字文本 "gvSLT" 而不是gvSLT的值放在單引號內。
第三個示例,我不確定,但可能會失敗,因為沒有與“新聞”值完全相同的記錄。
您應該始終使用參數來避免這些問題以及其他問題,例如 SqlInjection、解析數值中的小數點分隔符以及如果輸入gvSLT本身包含一個或多個單引號的問題。
所以一個簡單的解決方案應該是:
cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = @site"
cmd.Parameters.Add("@site", DbType.String).Value = gvSLT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.