- PR -

DataViewのRowFilterでの全角半角区別

1
投稿者投稿内容
fastsuzuka
会議室デビュー日: 2004/03/02
投稿数: 2
投稿日時: 2007-02-23 10:35
いつもお世話になっております。
DataTableとDataViewについて質問させて下さい。

VisualStudio2005とC#、DBはSQL Server2005 を使用しています。

テーブルに以下のようなデータがあり、それをDataTableにFillで検索しています。

t_test
==================
ID | Name
------------------
001 | AIUEO     ← 半角
002 | AIUEO   ← 全角
003 | 12345     ← 半角
004 | 12345   ← 全角
-------------------

〜 接続などは略 〜
DataTable dtb = new DataTable();
DataAdapter1.Fill(dtb);

これをDataViewに変換し、RowFilterで絞り込みを行うときに、全角半角が
同一の結果として返却されてしまいます。

DataView dv = new DataView(dtb);
dv.RowFilter = "NAME = '12345'";

↑をするとRowCountは2になり、[12345]と[12345]の2レコードが返ってきてしまいます。
DataTableのSelectメソッドでも同じ結果となりました。
原因を調べようとMSDNやWebを探しましたが見つかりませんでした。

DataTableにLocaleプロパティがあるのでこれかと思い "ja"や"ec"などを入れましたが
変わりませんでした。

もし原因や解決法をご存じの方がいらっしゃいましたら教えていただけないでしょうか。
よろしくお願い致します。

[ メッセージ編集済み 編集者: fastsuzuka 編集日時 2007-02-23 11:56 ]
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-02-23 11:37
.NET側で解決する方法は存じませんが、
SQL Server側の照合順序が関係している可能性はあると思います。
参考になりましたら。

http://msdn2.microsoft.com/ja-jp/library/ms187582.aspx

.NET側だと DataSet.Locale 周辺とかかなぁ…とは思ったんですが、
私もよくわかりませんでした。
fastsuzuka
会議室デビュー日: 2004/03/02
投稿数: 2
投稿日時: 2007-02-23 11:53
KI様
返信ありがとうございます。
今回の場合はDBの取得でWHERE句を指定した場合は正常に区別されていました。
照合順序は Japanese_BIN になっていましたので。
(記述しなくて申し訳ないです)

結果ですが自己解決しました。
DataViewを作成する前に DataTable.CaseSensitive プロパティを true にしたら
区別するようになりました。

dtb.CaseSensitive = true;
DataView dv = new DataView(dtb);
dv.RowFilter = "NAME = '12345'";

ただ DataTable.Select メソッドだと区別されないという動作をしたのがよく分からない
ですが、DataViewで解決できました。
1

スキルアップ/キャリアアップ(JOB@IT)