我正在开发一个从 MS SQL Server 2008 或 2008 R2 服务器读取值的 C# 项目。
查询看起来像这样:
string charge="1234567";
string command = string.Format("SELECT * FROM tableX WHERE chargeField = '{0}' ", charge);
chargeField 来自 nvarchar(50) 类型 - 不要问我为什么 - 我无法更改数据库。此外,这些条目是由另一个我也无法更改的工具写入数据库的。有时,chargeField 值中会有前导或结束空格字符,所以我的查询不会返回任何内容,因为 "1234567" != " 1234567 "
但是,当我编写这样的查询时(没有''):
string command = string.Format("SELECT * FROM tableX WHERE chargeField = {0} ", charge);
有用。为什么这甚至可以工作-不需要''符号来指示数据库字段是字符串?我可以安全地更改所有查询吗?这是来自 MS SQL Server 的“功能”吗?这里到底发生了什么。
编辑
我通过使用解决了这个问题:
string command = string.Format("SELECT * FROM tableX WHERE RTRIM(LTRIM(chargeField)) = {0} ", charge);
谢谢。