どうも凡人です。
業務で嵌った。
SQL Serverを利用した.NET FrameworkのC/S型システムです。
データベースには、次の値が入ったレコードがありました。
値はString(正しくはvarChar)型です。
レコードA:1,000
レコードB:1,000
カンマが全角と半角の両方利用されている状態です。
それ以外は、この2つは同じ値でした。
どちらも、「カンマで区切られた1000」を表していました。
SQL Server上では、これらの値は区別されていました。
次に、DataSetにこれらのレコードを読み込みます。
すると、レコードAとレコードBの値が同じものとして扱われていました。
int型としてレコードを読み込んだなら、暗黙の型変換が行われるかもしれません。
行われないかもしれませんが。未確認です。
しかし、DataSetのテーブルでは、これらの値はString型として定義していました。
どうやら、.Net FrameworkのDataSetの照合順序はデフォルトではこのあたりを同一として見るようです。
- 全角と半角を区別しない
- カタカナとひらがなを区別しない
- 大文字小文字を区別しない
解決策としては、DataTableのCaseSensitiveプロパティをTrueにする。
そうすると、このあたりを区別します。
ただし、これでもSQL Serverの照合順序とは完全一致しないようです。
このあたりの照合順序の話は、後日しっかりまとめようと思います。