C#でDataTableのカラムのデータ型を読んでみた

C#でDataAdapterのFillメソッドを使ってDataTableにデータを読み込むと、自動的にテーブルの構造を作ってくれます。とっても便利なのですが、そのDataTableからデータを取り出して計算に使おうとすると、型が不一致だと怒られることがあります。というわけで、DataTableのカラムの型を読み取ってみました。

試した環境は下記です。

  • Visual Studio 2015 Express for Windows Desktop
  • PupSQLite 1.25.5.0 (SQLite 3.8.10.2)
  • System.Data.SQLite 1.0.99

データ型を調べる

C#のデータ型

C#のデータ型にはいろいろなものがあります。どういう型があるかという点については、MSDNに組み込み型の一覧表がありますので参照してください。

データベースのデータ型

SQLite3のデータ型は、TEXT、INTEGER、REAL、BLOB、NULLです。SQLite3にデータを入れると、これらのいずれかの型に自動的に変換されて格納されるとのことです。ただしフィールド毎に推奨する型を指定できて、それだとTEXT、NUMERIC、INTEGER、REAL、NONEの5種類になります。さらに、擬似的にDATETIMEやBOOLIANで指定できます。DATETIMEはTEXT/INTEGER/REALのいずれか、BOOLIANはINTEGERに変換されるそうです。

AccessやSQL Serverはもっといろいろなデータ型が定義されています。

データ型の不一致

例えば、DataAtapter.Fill()メソッドで作ったDataTableから整数の値を取り出してint型の変数に足そうとしたら、型が合わないと怒られたりします。というわけで、DataTableの各カラムの型がどうなっているか調べたいことがあるわけです。

DataTableのカラムの型を調べる

DataTableのColumnsプロパティを参照すると、DataTableのカラムのコレクション(DataColumnオブジェクトのコレクション)が得られます。このコレクションから調べたいカラムのDataColumnオブジェクトを取り出して、そのオブジェクトのDataTypeプロパティを見れば、そのカラムのデータ型が分ります。下記の様な感じですね。

試してみた

PupSQLiteでSQLite3のデータベースを作って、C#でDataTableに読み込んでカラムのデータ型を表示させてみました。

ウィンドウにTextBlockを貼って、アプリが起動すると同時にデータベースファイルを読み込んでTextBlockにデータ型を表示します。

ウィンドウレイアウトは下記の様にしました。

PupSQLiteで作ったデータベースは下図の通りです。
160214-2-01

一応、C#の整数と実数の型を一通りそろえたのですが、INTEGERのフィールドにulongの数値は入力できませんでした。
160214-2-02

C#からはSystem.Data.SQLiteを使ってデータベースアクセスしますので、NuGetでSystem.Data.SQLiteをプロジェクトに追加します。
160214-2-03

コードは下記の様にしました。

実行結果は下図の様になりました。
160214-2-04

INTEGERのカラムはInt64に、REALのカラムはDoubleに、DATETIMEのカラムはDateTimeに、BOOLEANのカラムはBooleanに、TEXTのカラムはStringになっています。C#では、intはSystem.Int32で、System.Int64はlongであることに注意です。

まとめ

  • DataColumn.DataTypeでDataTableのデータ型を確認できる。
  • SQLiteのINTEGERはC#のlong(Int64)である。
  • SQLiteのREALはC#のdoubleである。
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク