ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
C# : GetSchema メソッドでデータベース内のテーブル一覧と指定したテーブルの列名一覧を取得する
日時: 2014/12/21 20:45
名前: lightbox





using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Data.Odbc;

namespace ConsoleApplication2 {
	class Program {
		static void Main(string[] args) {
			// 新しい OdbcConnectionStringBuilder オブジェクトを作成
			OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();

			// ドライバ文字列をセット ( 波型括弧{} は必要ありません ) 
			// 文字列を正確に取得するには、レジストリ : HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI
			builder.Driver = "MySQL ODBC 5.3 Unicode Driver";

			// 接続用のパラメータを追加
			builder.Add("SERVER", "localhost");
			builder.Add("DATABASE", "lightbox");
			builder.Add("UID", "root");
			builder.Add("PWD", "password");

			// 内容を確認
			Console.WriteLine(builder.ConnectionString);

			// 新しい OdbcConnection オブジェクトを作成
			OdbcConnection myCon = new OdbcConnection();

			// 接続文字列を設定
			myCon.ConnectionString = builder.ConnectionString;

			// 接続を開く
			try {
				myCon.Open();
			} catch (OdbcException ex) {
				Console.WriteLine("接続エラーです");
				// Console.WriteLine( ex.Message )
				ErrorAction(ex);
				return;
			}

			// データベースのテーブル一覧のメタデータを取得
			// TABLE_CATALOG
			// TABLE_SCHEMA
			// TABLE_NAME
			// TABLE_TYPE
			DataTable dataTable = myCon.GetSchema(OdbcMetaDataCollectionNames.Tables);

			// 一覧表示
			DataRow row = null;
			foreach (DataRow row_loopVariable in dataTable.Rows) {
				row = row_loopVariable;
				DataColumn column = dataTable.Columns["TABLE_NAME"];
				Console.WriteLine(row[column]);
			}

			// データベースの列名一覧のメタデータを取得
			// TABLE_CATALOG
			// TABLE_SCHEMA
			// TABLE_NAME
			// COLUMN_NAME
			// 配列で、対象データを絞る
			string[] restrictionValues = {
				null,
				null,
				"社員マスタ"
			};

			// 社員マスタの列のメタデータ
			dataTable = myCon.GetSchema(OdbcMetaDataCollectionNames.Columns, restrictionValues);

			// 列名の一覧を表示
			foreach (DataRow row_loopVariable in dataTable.Rows) {
				row = row_loopVariable;
				DataColumn column = dataTable.Columns["COLUMN_NAME"];
				Console.WriteLine(row[column]);
			}

			// 接続を閉じる
			myCon.Close();

			// OdbcConnection オブジェクトに使用されているすべてのリソースを解放
			myCon.Dispose();

			// 処理終了
			Console.WriteLine("処理が終了しました");

			// 一時停止
			Console.Write("Enterキーを押して下さい : ");
			Console.ReadLine();
		}

		// **********************
		// エラー処理
		// **********************
		public static void ErrorAction(OdbcException ex) {
			string CrLf = "\r\n";
			string errorMessages = "";
			int i = 0;

			for (i = 0; i <= ex.Errors.Count - 1; i++) {
				errorMessages += "Index #" + i.ToString() + CrLf + "Message: " + ex.Errors[i].Message + CrLf + "NativeError: " + ex.Errors[i].NativeError.ToString() + CrLf + "Source: " + ex.Errors[i].Source + CrLf + "SQL: " + ex.Errors[i].SQLState + CrLf;
			}

			Console.WriteLine(errorMessages);

		}

	}


}
メンテナンス


日時: 2014/12/21 20:45
名前: lightbox