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);
ありがとう。