Vb.net Visual Basic 2015 SQLite更新查询不工作

Vb.net Visual Basic 2015 SQLite更新查询不工作,vb.net,sqlite,Vb.net,Sqlite,我使用NuGet Package Manager在我的Visual Basic 2015项目中安装SQLite软件包,以便在我的应用程序中使用它。我所面临的问题是,我的应用程序中有一个sub,其代码如下所示,我正在使用它更新SQLite中的表,但它不会更新值 AddErrors是另一个子类,它将try-catch捕获的错误添加到同一个SQLite数据库但不同的表中,并且工作正常。你能告诉我我做错了什么吗 我尝试了注释代码和未提交代码,都没有更新数据库,也没有抛出任何错误 Public Sub P

我使用NuGet Package Manager在我的Visual Basic 2015项目中安装SQLite软件包,以便在我的应用程序中使用它。我所面临的问题是,我的应用程序中有一个sub,其代码如下所示,我正在使用它更新SQLite中的表,但它不会更新值

AddErrors是另一个子类,它将try-catch捕获的错误添加到同一个SQLite数据库但不同的表中,并且工作正常。你能告诉我我做错了什么吗

我尝试了注释代码和未提交代码,都没有更新数据库,也没有抛出任何错误

Public Sub PostedLink(ByVal id As String, ByVal link As String)
    Dim query As String = "UPDATE Table SET torf = 1 , link = '" & link & "' WHERE id = '" & id & "';"
    Dim affectedRows As Integer = 0
    Try
        Using con As New SQLiteConnection(connectionString)
            con.Open()
            Using cmd As New SQLiteCommand(con)
                cmd.CommandTimeout = 20
                cmd.CommandText = query
                'Dim dr As SQLiteDataReader
                'dr = cmd.ExecuteReader()
                affectedRows = cmd.ExecuteNonQuery()
            End Using
            con.Close()
        End Using
    Catch ex As Exception
        AddErrors("Updating table", ex.ToString)
    End Try
End Sub
我试图更新的表具有以下结构

CREATE TABLE Table
(
id VARCHAR(100) PRIMARY KEY NOT NULL,
text VARCHAR(100),
link VARCHAR(254) DEFAULT "",
torf BOOLEAN NOT NULL DEFAULT 0
);
解决方案由OP

我将代码更改为使用参数化查询,如下所示,它工作得完美无缺

Public Sub PostedLink(ByVal id As String, ByVal link As String)
    Dim query As String = "UPDATE Table SET torf = 1, link = @link WHERE id = @id;"
    Dim affectedRows As Integer = 0
    Try
        Using con As New SQLiteConnection(connectionString)
            con.Open()
            Using cmd As New SQLiteCommand(con)
                cmd.CommandTimeout = 20
                cmd.CommandText = query
                With cmd.Parameters
                    .Add(New SQLiteParameter("@link", link))
                    .Add(New SQLiteParameter("@id", id))
                End With
                'Dim dr As SQLiteDataReader
                'dr = cmd.ExecuteReader()
                affectedRows = cmd.ExecuteNonQuery()
            End Using
            con.Close()
        End Using
    Catch ex As Exception
        AddErrors("Updating table", ex.ToString)
    End Try
End Sub

您应该使用参数化查询,当前易受SQL注入的攻击,变量中的
字符将破坏一切。查看是否没有异常,并且更新没有发生,那么很可能WHERE子句不匹配任何行。(禁用异常捕获以100%确定)您的表未命名为
table
,它是
PostsList
。如果忽略了可能引发的SqliteException,则AddErrors()中有一个输入错误和一个bug。我已更改了问题的表名和变量。表名不是问题所在。我按照Alex的建议修改了代码,效果很好。