DataTable.Select メソッドに日付型の指定ってどうやるの? では、いろいろと日付型の使い方について教えてもらいました。教えてくださったみなさんありがとうございます。

 おかげさまで日付型を DataTable.Select メソッドで使えるようになりました。どうもシャープ記号で囲む事に惑わされていたようです。ドキュメントには「日付値はシャープ記号 (#) で囲む必要があります。」としか記載されていません。実はこのとおりシャープ記号で囲むだけでよかったのです。変に囲んだ時の年月日の順番とかを気にしてしまって、「yyyy/MM/dd」でいいのか「M/d/yyyy」でないといけないのか、と考えていました。

日付型はこうやって使えるよ
' 今日の 0 時 0 分 0 秒 0 ミリのデータを抽出
DataTable.Select(String.Format("DateColumn = #{0}#", DateTime.Today)) 
' 今日のデータを抽出
DataTable.Select(String.Format( _
    "DateColumn >= #{0}# AND DateColumn < #{1}#", DateTime.Today, DateTime.Today.AddDays(1)))

 これで完璧! と思っていたら、実はドキュメントの内容が日本語版だとちょっと古いようです。英語のサイトや「MSDN ライブラリ 2007 年 6 月版」では次のように記載されています。

DataColumn.Expression プロパティ - MSDN ライブラリ 2007 年 6 月版 から引用
日付の値は、データ プロバイダに応じて、シャープ記号 (#) または一重引用符 (') で囲む必要があります。

 データ プロバイダ毎に囲む文字も変わってくるのですね。でも DataTable がデータ プロバイダとどういう関係を持っているのは不明ですが、とりあえずプロバイダ毎の囲む文字を表にしてみました。

プロバイダ 囲む文字
SqlClient 一重引用符 (')
OracleClient シャープ記号 (#)
OleDb シャープ記号 (#)
Odbc シャープ記号 (#)

 これでなんとか日付型について、納得のいく処理がかけそうです。教えてくださったみなさん、本当にありがとうございます。