Vb.net Visual Basic 2015 SQLite更新查询不工作
我使用NuGet Package Manager在我的Visual Basic 2015项目中安装SQLite软件包,以便在我的应用程序中使用它。我所面临的问题是,我的应用程序中有一个sub,其代码如下所示,我正在使用它更新SQLite中的表,但它不会更新值 AddErrors是另一个子类,它将try-catch捕获的错误添加到同一个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
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的建议修改了代码,效果很好。