[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 スキーマコレクションを参考に。(以下サイトの「列」が該当部分)