在VB.NET中使用参数化输入向SQLite查询添加通配符

au9on6nz  于 2023-05-18  发布在  SQLite
关注(0)|答案(1)|浏览(201)

我在Visual Studio 2022社区中使用VB和SQLite 3.40.0数据库。
我有两个文本框,一个用于姓,一个用于名。如果它们都是空的,我希望数据库从Person表中提取每一条记录。如果其中一个或两个有文本,我想它拉的第一个和/或姓氏(无论文本框包含文本)包含输入的文本的所有记录。例如,如果我输入“o”作为姓氏,输入“oh”作为名字,它将找到姓氏包含“o”而名字包含“oh”的条目。我相信这个例子的SQL语句应该是:

"SELECT * FROM Person WHERE lName='%o%' AND fName='%oh%'"

也就是说,我使用参数,因为我读到的所有内容都说它更安全,可以防止SQL注入,所以我的调用看起来像这样:

"SELECT * FROM Person WHERE lName=@lName AND fName=@fName"
sqliteExecCmd.Parameters.AddWithValue("@lName", searchLName)
sqliteExecCmd.Parameters.AddWithValue("@fName", searchFName)

我的问题是,如何在使用参数时使用百分号/通配符?
我尝试在参数的字符串中添加百分号(显然不起作用):

sqliteExecCmd.Parameters.AddWithValue("@lName", "%" & searchLName & "%")

我还尝试在SQL命令本身添加百分号(显然,这也不起作用):

"SELECT * FROM Person WHERE lName=%@lName% AND fName=%@fName%"

编辑1:在搜索了一段时间后,我发现了一些其他的东西可以尝试,这也不起作用(我还尝试了nvarchar来代替文本):

sqliteExecCmd.Parameters.AddWithValue("@lName", SqlDbType.Text).Value = "%" & searchLName & "%"
h22fl7wq

h22fl7wq1#

经过更多的研究和测试,我发现我原来的SQL语句是什么不工作。以下是我应该使用的正确SQL语句:

"SELECT * FROM Person WHERE lName LIKE '%o%' AND fName LIKE '%oh%'"

下面是我正在使用的代码,它似乎工作正常:

sqliteExecCmd.CommandText = "SELECT * FROM Suspect WHERE lName LIKE @lName AND fName LIKE @fName"
sqliteExecCmd.Parameters.AddWithValue("@lName", "%" & searchLName & "%")
sqliteExecCmd.Parameters.AddWithValue("@fName", "%" & searchFName & "%")

相关问题