近日在写程序中写SQL查询语句时
发现一个奇怪的问题:
select * form tablename where name='"+textbox1.text+"'"
有时,运行中一点儿问题也没有
可是,有时却会出现问题啦
比如说textbox1.text的内容为AAA
按照程序的意思应该是查询出所有满足NAME=AAA的记录
(在这里我要申明一点,数据库中绝对存在NAME=AAA的记录)
可是,出人意料的是程序运行后
没有显示任何的结果(意味着没有查询到任何东东)
当时,我立马狂晕呀
到后来去翻了一些资料,原来只须这样:
select * form tablename where name=N'"+textbox1.text+"'"
程序无论怎么运行,都能获得想要的结果!
[其实到现在,虽然能实现要求了,但我仍不明白,为何须加上一个“N”,郁闷]
2005-02-04 16:05 |
这是编码的问题。
“如果指定常量,则必须使用 N 作为前缀。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 则无效。”
主要是把text或varchar类型常量转换成ntext或nvarchar。
2005-02-04 16:06 |
如果是unicode字符串就应该前面加N
2005-02-04 16:11 |
可是为何当textbox1.text中的值改变时,有时能查询得出来
有时又不能查询得出来~?而加N后却不会出现上面的情况呢?
有没有一个比较合理的解释呢?
2005-02-04 16:19 |
多语言的环境中,字符集一般都会用unicode,sql server的字段类型会用nchar、nvarchar或ntext,在这种情况下如果不使用sqlparameter来传递数据参数,那么参数要用N作为前缀
2005-02-04 16:20 |
可是为何有时不用N作为前缀也能查询出结果?
2005-02-04 16:54 |
什么情况下呢?
有可能英文和数字这些字符可以,中文或其他特殊字符就会出现问题。
不知道你用地址栏传递信息的时候有没有观察过,英文和数字不会被编码,而空格,中文都被编码为%20%f9这样的串了~~~
2005-02-04 17:02 |
我查询的字符串值都是繁体汉字
有些繁体汉字的字符串可以被查询到值,可是有些就不行了