[C#] [mdb] C#でmdbのテーブル定義情報を取得、及びカラム単位のデータ型などを取得
バージョン
C# 8.0
概要
C#でテーブルのスキーマ情報を取得し、そのスキーマ情報に格納されているカラム単位でのデータ型やNULL許容制約などの状態を取得する。
コード
string tableName = "PersonInfo"; // 取得したいテーブル名
string[] restrictions = new string[4];
restrictions[2] = tableName;
// 対象テーブルのスキーマ情報を取得
var dt = con.GetSchema("Columns", restrictions); // conはOleDbConnectionで事前にOpenしていること
// カラムは先頭から順に格納されている保証がないので注意
foreach (var row in dt.Rows.Cast<DataRow>())
{
// カラム名
var colmnname = row["column_name"].ToString();
// データ型
var dattype = (System.Data.OleDb.OleDbType)row["data_type"]; // OleDbTypeのenum
var dattypeint = (int)row["data_type"]; // コード
// NULL許容
var nullable = (bool)row["is_nullable"];
Console.WriteLine("col:" + colmnname + " datatype:" + dattype.ToString() + "(" + dattypeint.ToString() + ")" +
" nullable:" + nullable.ToString());
}
上記コードforeachにあるrowのrow.ItemArrayにカラム情報が格納されているがobject[28]の配列になっており
row.ItemArray[0]にはどのようなデータが入っているかなどが判り難い。
Visual Studioでデバッグできるならクイックウォッチでrow.Tableを展開すれば使える要素名、値がわかり、
row["data_type"]のようにして値を取得できる。
指定できる要素名の代表的なものを以下に記載する。
| 要素名 | 内容 |
|---|---|
| TABLE_NAME | テーブル名 |
| COLUMN_NAME | カラム名 |
| IS_NULLABLE | NULL許容 |
| DATA_TYPE | データ型(※1) |
※1・・・データ型はintでコードが格納されている。System.Data.OleDb.OleDbTypeのenumを参照。
各要素についてはOLE DB スキーマコレクションを参考に。(以下サイトの「列」が該当部分)
