请帮助我,因为我似乎无法做到正确
我正在尝试在访问数据库中的列名tblStudents中查询名称(Daniel O'Neal),但是访问报告语句错误:
Select * from tblStudents where name like 'Daniel O'Neal'
因为名字中的撇号。
我如何克服这一点。
提前谢谢
答案 0 :(得分:56)
你通过加倍来逃避 '
,所以:
Select * from tblStudents where name like 'Daniel O''Neal'
请注意,如果您从用户输入中接受“Daniel O'Neal”,则报价错误是一个严重的安全问题。您应该始终清理字符串或使用参数化查询。
答案 1 :(得分:2)
在查询中包含字符串文字时,可以将字符串括在单引号或双引号中; Access'数据库引擎也将接受。所以双引号将避免包含单引号的字符串的问题。
SELECT * FROM tblStudents WHERE [name] Like "Daniel O'Neal";
如果你想在字符串中保留单引号,你可以将其中的单引号加倍,如其他答案所述。
SELECT * FROM tblStudents WHERE [name] Like 'Daniel O''Neal';
请注意 name 周围的方括号。我使用括号来减少混淆数据库引擎的可能性,因为 name 是reserved word。
目前尚不清楚为什么在查询中使用 Like 比较。根据你所展示的内容,这应该可以改变。
SELECT * FROM tblStudents WHERE [name] = "Daniel O'Neal";
答案 2 :(得分:1)
通过编写O'Neal
(两个撇号)来逃避O''Neal
中的撇号。
答案 3 :(得分:0)
...更好的是将名称声明为变量,并在之前询问字符串中是否有撇号:
e.g:
DIM YourName字符串
YourName =“Daniel O'Neal”
If InStr(YourName, "'") Then
SELECT * FROM tblStudents WHERE [name] Like """ Your Name """ ;
else
SELECT * FROM tblStudents WHERE [name] Like '" Your Name "' ;
endif
答案 4 :(得分:0)
如何更简单:从tblStudents中选择*,其中[name] = replace(YourName,"'","''" )