簡體   English   中英

vb.net select 語句失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM