WebSurfer's Home

トップ > Blog 1   |   ログイン
APMLフィルター

Eval の引数

by WebSurfer 2010年8月20日 22:02

Eval の引数の文字列として使える文字に制限があることもついでに書いておきます。

Eval("xxxxx") の xxxxx は、先の記事で書きましたように、プロパティ名またはインデクサ名の文字列でなければならないそうです。

SQL Server の DB のデータを GridView に表示する場合、通常、xxxxx には DB のフィールド名が使用されます。

そこで、DB のフィールド名に "Name(ABC)" のように半角のカッコが入っていた場合どうなるでしょう?

Visual Studio のウィザードはなかなか賢くて、「Select ステートメントの構成」メニューで「テーブルまたはビューから列を指定します(T)」を選んで SELECT クエリを作ると、自動的に [NAME(ABC)] AS column1 というような別名を定義してくれるので問題ないです。(ただし、クエリビルダでクエリを組み立てるとダメです)

自分でクエリを組み立てる場合は要注意です。ちなみに、DB のフィールド名に "Name(ABC)" という文字列を使った場合、カッコが全角か半角かによって、結果は以下のように異なります。

SELECT クエリ Eval の引数 結果
[Name(ABC)]
半角カッコ
"Name(ABC)"
半角カッコ
System.ArgumentException: DataBinding: 'System.String' はインデックス付のアクセスを許可しません。
[Name(ABC)]
半角カッコ
"[Name(ABC)]"
半角カッコ
System.ArgumentException: NAME(ABC は、テーブル DefaultView の DataColumn でも DataRelation でもありません。
[Name(ABC)]
半角カッコ
"Name(ABC)"
全角カッコ
System.Web.HttpException: DataBinding: 'System.Data.DataRowView' には NAME(ABC) という名前のプロパティは含まれません。
[NAME(ABC)]
半角カッコ
"[Name(ABC)]"
全角カッコ
問題なし。
[Name(ABC)]
全角カッコ
"Name(ABC)"
全角カッコ
問題なし。
[Name(ABC)]
全角カッコ
"[Name(ABC)]"
全角カッコ
問題なし。

SELECT [NAME(ABC)] のカッコを半角から全角に変更してもデータを抽出できるのは、SQL Server のデフォルトの照合順序が Japanese_CI_AS(全角半角を区別しない)だからです。

Eval メソッドの引数で [ ] は特別な意味を持つらしいです。[ ] を使うと、SQL Server のデフォルトの照合順序にあわせて、全角文字と半角文字の区別をしなくなるような感じです。

一体どのように解釈されているのか訳が分かりませんが、とにかく、Eval メソッドの引数の中の文字に半角の( ) を使ってはダメで、使うと予期しない結果になるようです。

Tags: ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。

Calendar

<<  2024年4月  >>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar