This code was downloaded from MOBZystems, Home of Tools. No license, use at will. And at your own risk!
Imports System.IO Imports System.Text Module MainModule Const ExeName As String = "ExportDbInfo" Const DefaultSourceFileName As String = "DbInfo.vb" ''' <summary> ''' Export the structure of an Access database to a VB.NET source file ''' ''' Usage: ExportDbInfo database-file-name [source-file-name] ''' ''' Args(0) is Access database name ''' Args(1) is VB.NET source file name (optional) ''' </summary> ''' <returns>0 if OK, 1 if error(s)</returns> Function Main(ByVal Args() As String) As Integer If Args.Length > 0 Then Dim DatabaseName As String = Args(0) Dim SourcefileName As String = DefaultSourceFileName If Args.Length > 1 Then SourcefileName = Args(1) End If If Args.Length > 2 Then ErrorMessage("Too many arguments") Return 1 End If Try Return ExportDBStructure(DatabaseName, SourcefileName) Catch Ex As ApplicationException Console.Error.WriteLine(ExeName + ": " + Ex.Message) Return 1 Catch Ex As Exception Console.Error.WriteLine(ExeName + ": Unexpected error: " + Ex.Message) Return 1 End Try Else ErrorMessage("No arguments specified") Return 1 End If End Function ''' <summary> ''' Print an error message to Console.Error, then report usage instructions ''' </summary> Private Sub ErrorMessage(ByVal Message As String) Console.Error.WriteLine( _ ExeName + " v" + _ My.Application.Info.Version.Major.ToString() + "." + _ My.Application.Info.Version.Minor.ToString() + "." + _ My.Application.Info.Version.Build.ToString() + _ ": " + Message _ ) Console.Error.WriteLine() Console.Error.WriteLine("Usage:") Console.Error.WriteLine() Console.Error.WriteLine(ExeName + " database-name [source-file-name]") Console.Error.WriteLine() Console.Error.WriteLine("Writes table and column names of the specified Access database") Console.Error.WriteLine("to the specified VB.NET source file.") Console.Error.WriteLine("Default source file name is " + DefaultSourceFileName + " in the working directory.") Console.Error.WriteLine() End Sub ''' <summary> ''' Do the actual work: export the source file ''' </summary> ''' <param name="DatabaseName">File name of an Access database</param> ''' <param name="SourceFileName">Name of the VB.NET source file</param> Private Function ExportDBStructure(ByVal DatabaseName As String, ByVal SourceFileName As String) As Integer ' Set up an Access connection string Dim ConnectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", DatabaseName) ' The schema information for this connection Dim SchemaInfo As DbSchemaInfo Using Connection As New OleDb.OleDbConnection(ConnectionString) Try Connection.Open() ' Get schema information for the connection SchemaInfo = New DbSchemaInfo(Connection) Catch Ex As Exception Throw New ApplicationException("Failed to open database '" + DatabaseName + "': " + Ex.Message, Ex) End Try Connection.Close() End Using Dim ErrorCount As Integer = 0 ' First check validity of table and column names ' Report any errors to Console.Error For Each TableInfo As DbSchemaInfo.DbSchemaTableInfo In SchemaInfo.Tables Dim TableName As String = TableInfo.TableName If TableName.Contains(" ") Then Console.Error.WriteLine("Table name '{0}' contains spaces", TableName) ErrorCount += 1 End If ' Create public shared constants for each column For Each ColumnName As String In TableInfo.ColumnNames If ColumnName.Contains(" ") Then Console.Error.WriteLine("Table '{0}': column name '{1}' contains spaces", TableName, ColumnName) ErrorCount += 1 End If Next ColumnName Next TableInfo ' Abort here if we have errors: If ErrorCount > 0 Then Console.Error.WriteLine(String.Format("{0} Error(s)", ErrorCount)) Return 1 ' Signal error Else ' Write all output to this string builder Dim Output As New StringBuilder ' Write out a header Dim N As DateTime = DateTime.Now Output.AppendLine("Imports System.ComponentModel") Output.AppendLine() Output.AppendLine("''' <summary>") Output.AppendLine("''' Generated by " + ExeName + " at " + N.ToString("yyyy\-MM\-dd HH\:mm\:ss")) Output.AppendLine("''' *** DO NOT MODIFY ***") Output.AppendLine("''' </summary>") ' Set up a class definition. Derive class name from file name Dim ClassName As String = Path.GetFileNameWithoutExtension(SourceFileName) Output.AppendLine("Public Class " + ClassName) ' Loop over tables to create class definitions for each For Each TableInfo As DbSchemaInfo.DbSchemaTableInfo In SchemaInfo.Tables Dim TableName As String = TableInfo.TableName ' Write out a class definition for the table Output.AppendLine(Chr(9) + String.Format("Public Class {0}", TableName)) ' Create public shared constants for each column For Each ColumnName As String In TableInfo.ColumnNames Output.AppendLine(Chr(9) + Chr(9) + String.Format("Public Const {1} As String = ""{1}""", TableName, ColumnName)) Next ColumnName Output.AppendLine(Chr(9) + String.Format("End Class ' {0}", TableName)) Output.AppendLine() Next TableInfo ' Write out a shared member for each table For Each TableInfo As DbSchemaInfo.DbSchemaTableInfo In SchemaInfo.Tables Output.AppendLine(Chr(9) + String.Format("Public Const {0}Table As String = ""{0}""", TableInfo.TableName)) Next TableInfo ' End outer class Output.AppendLine(String.Format("End Class ' {0}", ClassName)) Try ' Write it all out to the specified source file File.WriteAllText(SourceFileName, Output.ToString()) Catch Ex As Exception Throw New ApplicationException("Failed to write to source file '" + SourceFileName + "': " + Ex.Message, Ex) End Try Console.WriteLine(ExeName + ": Database '" + DatabaseName + "' sucessfully exported to '" + SourceFileName + "'.") Return 0 ' No error End If End Function End Module