Skip to content

Instantly share code, notes, and snippets.

@NPS-ARCN-CAKN
Created January 2, 2018 22:38
Show Gist options
  • Save NPS-ARCN-CAKN/41595c23a626390ed1bf93ac0c556080 to your computer and use it in GitHub Desktop.
Save NPS-ARCN-CAKN/41595c23a626390ed1bf93ac0c556080 to your computer and use it in GitHub Desktop.
A function to return a DataTable of metadata about a DataTable
''' <summary>
''' Returns a DataTable containing metadata about the structure of the submitted DataTable
''' </summary>
''' <param name="InputDataTable">DataTable to describe.</param>
''' <returns>DataTable</returns>
Public Function GetMetadataDataTable(InputDataTable As DataTable) As DataTable
Dim ColumnsDataTable As New DataTable("Columns")
'column names column
Dim ColumnNameColumn As New DataColumn
With ColumnNameColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Column name"
.ColumnName = "ColumnName"
End With
'ColumnDescription column
Dim ColumnDescriptionColumn As New DataColumn
With ColumnDescriptionColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Description"
.ColumnName = "ColumnDescription"
End With
'data type column
Dim DataTypeColumn As New DataColumn
With DataTypeColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Data type"
.ColumnName = "DataType"
End With
'units column
Dim UnitsColumn As New DataColumn
With UnitsColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Units"
.ColumnName = "Units"
End With
'allowdbnull column
Dim AllowDBNullColumn As New DataColumn
With AllowDBNullColumn
.DataType = System.Type.GetType("System.String")
.Caption = "AllowDBNULL"
.ColumnName = "AllowDBNull"
End With
'AutoIncrement column
Dim AutoIncrementColumn As New DataColumn
With AutoIncrementColumn
.DataType = System.Type.GetType("System.String")
.Caption = "AutoIncrement"
.ColumnName = "AutoIncrement"
End With
'AutoIncrementSeed column
Dim AutoIncrementSeedColumn As New DataColumn
With AutoIncrementSeedColumn
.DataType = System.Type.GetType("System.String")
.Caption = "AutoIncrementSeed"
.ColumnName = "AutoIncrementSeed"
End With
'AutoIncrementStep column
Dim AutoIncrementStepColumn As New DataColumn
With AutoIncrementStepColumn
.DataType = System.Type.GetType("System.String")
.Caption = "AutoIncrementStep"
.ColumnName = "AutoIncrementStep"
End With
'Caption column
Dim CaptionColumn As New DataColumn
With CaptionColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Caption"
.ColumnName = "Caption"
End With
'ColumnMapping column
Dim ColumnMappingColumn As New DataColumn
With ColumnMappingColumn
.DataType = System.Type.GetType("System.String")
.Caption = "ColumnMapping"
.ColumnName = "ColumnMapping"
End With
'DateTimeMode column
Dim DateTimeModeColumn As New DataColumn
With DateTimeModeColumn
.DataType = System.Type.GetType("System.String")
.Caption = "DateTimeMode"
.ColumnName = "DateTimeMode"
End With
'DefaultValue column
Dim DefaultValueColumn As New DataColumn
With DefaultValueColumn
.DataType = System.Type.GetType("System.String")
.Caption = "DefaultValue"
.ColumnName = "DefaultValue"
End With
'Expression column
Dim ExpressionColumn As New DataColumn
With ExpressionColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Expression"
.ColumnName = "Expression"
End With
'ExtendedProperties column
'Dim ExtendedPropertiesColumn As New DataColumn
'With ExtendedPropertiesColumn
' .DataType = System.Type.GetType("System.String")
' .Caption = "ExtendedProperties"
' .ColumnName = "ExtendedProperties"
'End With
'MaxLength column
Dim MaxLengthColumn As New DataColumn
With MaxLengthColumn
.DataType = System.Type.GetType("System.String")
.Caption = "MaxLength"
.ColumnName = "MaxLength"
End With
'Table column
Dim TableColumn As New DataColumn
With TableColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Table"
.ColumnName = "Table"
End With
'Unique column
Dim UniqueColumn As New DataColumn
With UniqueColumn
.DataType = System.Type.GetType("System.String")
.Caption = "Unique"
.ColumnName = "Unique"
End With
'add the columns to the datatable
ColumnsDataTable.Columns.Add(ColumnNameColumn)
ColumnsDataTable.Columns.Add(CaptionColumn)
ColumnsDataTable.Columns.Add(DataTypeColumn)
ColumnsDataTable.Columns.Add(ColumnDescriptionColumn)
ColumnsDataTable.Columns.Add(UnitsColumn)
ColumnsDataTable.Columns.Add(AllowDBNullColumn)
ColumnsDataTable.Columns.Add(UniqueColumn)
ColumnsDataTable.Columns.Add(DefaultValueColumn)
ColumnsDataTable.Columns.Add(AutoIncrementColumn)
ColumnsDataTable.Columns.Add(AutoIncrementSeedColumn)
ColumnsDataTable.Columns.Add(AutoIncrementStepColumn)
ColumnsDataTable.Columns.Add(ColumnMappingColumn)
ColumnsDataTable.Columns.Add(ExpressionColumn)
'ColumnsDataTable.Columns.Add(ExtendedPropertiesColumn)
ColumnsDataTable.Columns.Add(MaxLengthColumn)
ColumnsDataTable.Columns.Add(TableColumn)
ColumnsDataTable.Columns.Add(DateTimeModeColumn)
Try
'load the columns data table with info about the input data table
For Each Column As DataColumn In InputDataTable.Columns
Dim NewRow As DataRow = ColumnsDataTable.NewRow
NewRow.Item("ColumnName") = Column.ColumnName
NewRow.Item("DataType") = Column.DataType.ToString.Replace("System.", "")
NewRow.Item("AllowDBNull") = Column.AllowDBNull
NewRow.Item("DefaultValue") = Column.DefaultValue
NewRow.Item("AutoIncrement") = Column.AutoIncrement
NewRow.Item("AutoIncrementSeed") = Column.AutoIncrementSeed
NewRow.Item("AutoIncrementStep") = Column.AutoIncrementStep
NewRow.Item("Caption") = Column.Caption
NewRow.Item("ColumnDescription") = Column.Caption
NewRow.Item("ColumnMapping") = Column.ColumnMapping
NewRow.Item("Expression") = Column.Expression
'NewRow.Item("ExtendedProperties") = Column.ExtendedProperties
NewRow.Item("MaxLength") = Column.MaxLength
NewRow.Item("Table") = Column.Table
NewRow.Item("Unique") = Column.Unique
NewRow.Item("DateTimeMode") = Column.DateTimeMode
'add the row to the table
ColumnsDataTable.Rows.Add(NewRow)
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
'return the metadata datatable
Return ColumnsDataTable
End Function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment