我在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 & "%"
1条答案
按热度按时间h22fl7wq1#
经过更多的研究和测试,我发现我原来的SQL语句是什么不工作。以下是我应该使用的正确SQL语句:
下面是我正在使用的代码,它似乎工作正常: