SQLの窓

2014年12月21日


VB.net : GetSchema メソッドでデータベース内のテーブル一覧と指定したテーブルの列名一覧を取得する

▼ これは、ODBC ドライバを列挙するスクリプトです


この仕様は元々 ADO のものです。Framework のドキュメントからはとても解りづらくなっていますが、古いドキュメントで容易に確認できます。

SchemaEnum

C# のコードはこちら

VB.net から C# へのオンライン変換ツールを久しぶりに使ってみましたが、後から手作業で変更したのは、ControlChars.CrLf を "\r\n" にしただけでした。
Imports System.Data
Imports System.Data.Odbc

Module Module1

	Sub Main()

		' 新しい OdbcConnectionStringBuilder オブジェクトを作成
		Dim builder As 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 オブジェクトを作成
		Dim myCon As New OdbcConnection()

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

		' 接続を開く
		Try
			myCon.Open()
		Catch ex As OdbcException
			Console.WriteLine("接続エラーです")
			' Console.WriteLine( ex.Message )
			Call ErrorAction( ex )
			Exit Sub
		End Try

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

		' 一覧表示
		Dim row As DataRow
		For Each row In  dataTable.Rows
			Dim column As DataColumn = dataTable.Columns.item("TABLE_NAME")
			Console.WriteLine( row.item(column) )
		Next

		' データベースの列名一覧のメタデータを取得
		' TABLE_CATALOG
		' TABLE_SCHEMA
		' TABLE_NAME
		' COLUMN_NAME
		' 配列で、対象データを絞る
		Dim restrictionValues As String() = {Nothing,Nothing,"社員マスタ"}

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

		' 列名の一覧を表示
		For Each row In  dataTable.Rows
			Dim column As DataColumn = dataTable.Columns.item("COLUMN_NAME")
			Console.WriteLine(row.item(column))
		Next

		' 接続を閉じる
		myCon.Close()

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

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

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

	End Sub

	' **********************
	' エラー処理
	' **********************
	Sub ErrorAction( ex As OdbcException )

		Dim CrLf As String = ControlChars.CrLf
		Dim errorMessages As String = ""
		Dim i As Integer

		For i = 0 To ex.Errors.Count - 1
			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
		Next i

		Console.WriteLine(errorMessages)

	End Sub

End Module

関連する記事

ODBC ドライバの列挙 / VBScript

WMIのレジストリアクセスで、レジストリエントリの一覧を取得する VBScript クラス


タグ:ODBC
posted by lightbox at 2014-12-21 20:52 | VB.NET : データベース | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり