我有此代碼來填充 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 陳述句失敗”
uj5u.com熱心網友回復:
您的第一個示例失敗,因為如果ytSiteType是字串型別的欄位,則您正在連接gvSLT的值而不將其放在單引號內。
第二個示例失敗,因為您將文字文本 "gvSLT" 而不是 gvSLT 的值放在單引號內。
第三個示例,我不確定,但可能會失敗,因為沒有與“新聞”值完全相同的記錄。
您應該始終使用引數來避免這些問題以及其他問題,例如 SqlInjection、決議數值中的小數點分隔符以及如果輸入gvSLT本身包含一個或多個單引號的問題。
所以一個簡單的解決方案應該是:
cmd.CommandText = "SELECT * FROM LinkTable WHERE ytSiteType = @site"
cmd.Parameters.Add("@site", DbType.String).Value = gvSLT
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/416490.html
標籤:
上一篇:在子回圈中回圈串列的最佳方法
