C#でデータベースに接続する方法はいくつかありますが、OleDbConnectionクラスやSqlConnectionクラスなどの DbConnectionクラスから派生したクラスを利用する事が多いかと思います。
DbConnectionクラスを使うとテーブル名の一覧を取得する事が可能です。
テーブル名の一覧が取得できれば、テーブルの有無を確認するといった使い方もできそうです。
ここでは、DbConnectionクラスを使ってテーブル名の一覧を取得する方法について解説します。
DbConnectionクラスのGetSchemaメソッド
DbConnectionクラスの GetSchemaメソッドを使えばテーブル名の一覧が取得できます。
GetSchemaメソッドは様々なスキーマ情報を取得する事ができるメソッドですが、第1引数に「Tables」を指定する事でテーブル名のリストを取得する事ができます。
結果は DataTableオブジェクトとして取得できます。
「TABLE_NAME」というカラム名にテーブル名が格納されています。
以下の例では、Microsoft Accessのデータベースを開きテーブル名の一覧を出力しています。
var builder = new System.Data.OleDb.OleDbConnectionStringBuilder();
builder["Provider"] = "Microsoft.ACE.OLEDB.12.0";
builder["Data Source"] = "C:\\Sample.accdb";
builder["Jet OLEDB:Database Password"] = "acbdefg";
using (var conn = new System.Data.OleDb.OleDbConnection(builder.ConnectionString))
{
conn.Open();
var dt = conn.GetSchema("Tables");
foreach (DataRow row in dt.Rows)
{
var tableName = row["TABLE_NAME"].ToString();
Console.WriteLine(tableName);
}
conn.Close();
}
※Accessの場合「MSys」で始まるシステムオブジェクトも含まれます
補足(その他のスキーマ情報)
GetSchemaメソッドは様々なスキーマ情報を取得する事が可能で、その情報はデータベースの種類毎に様々です。詳細は下記を参照してください。

コメント
コメントを投稿