DataTable to AstTableNode

DataTable to AstTableNode
This extension method will convert a datatable into an AstTableNode.

Remarks:
The datatype mapping is not complete

Diese extension method wandelt eine DataTable in eine AstTableNode um.

Hinweise:
Das Datatype-Mapping enthält nicht alle Datentypen.

Imports Varigence.Biml.Extensions
Imports Varigence.Languages.Biml
Imports Varigence.Languages.Biml.Table
Imports System.Data 
Imports System.Runtime.CompilerServices

Module DatatableExtensions
	<Extension()> 
	Public Function ToAstTableNode(DT As Datatable,schema As AstSchemaNode) As AstTableNode
		Dim BimlTable As New AstTableNode(Nothing)
		BimlTable.Name = DT.TableName
		BimlTable.Schema = schema
		For Each col  As DataColumn In dt.Columns
		Dim tableColumn As New AstTableColumnNode(Nothing)
			tableColumn.Name = col.ColumnName 
			tableColumn.DataType = GetDbType(col.DataType)
			tablecolumn.IsNullable = col.AllowDBNull
        	If col.maxlength > -1 Then tableColumn.Length = col.maxlength
			If tableColumn.DataType = DbType.Decimal Then
				' DataColumn doesn't know - so we need some defaults...
				tablecolumn.Precision = 32
				tablecolumn.Scale = 16
			End If
        BimlTable.Columns.Add(tableColumn)
		Next
		Return BimlTable
	End Function			 
	
	Public Function GetDbType(ByVal myType As System.Type) As DbType
			Select Case myType 
			Case  System.Type.GetType("System.Int32")
				Return dbtype.Int32
			Case System.Type.GetType("System.Int16")
				Return dbtype.int16
			Case System.Type.GetType("System.Boolean")
				Return dbtype.boolean
			Case System.Type.GetType("System.DateTime")
				Return dbtype.Datetime
			Case System.Type.GetType("System.Decimal")
				Return dbtype.Decimal
			Case Else 
				'Add further mappings as needed!
				Return Nothing
		End Select
  End Function
End Module
 <Biml xmlns="http://schemas.varigence.com/biml.xsd">
		<Connections>
		<OleDbConnection Name="MyConn" ConnectionString="foo"/>
    </Connections>
	<Databases>
			<Database Name="MyDB" ConnectionName="MyConn"/>
    </Databases>
	<Schemas>
		<Schema Name="dbo" DatabaseName="MyDB"></Schema>
    </Schemas>
</Biml>
 
 <#@ template language="VB" tier="2" #>
<#@ code file="..\Code\DataTableExtensions.vb" #>
<#@ import namespace="System.Data" #>
<# Dim Schema as AstSchemaNode 
if rootnode.schemas.count > 0 then schema = rootnode.schemas(0) #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
 	<Tables>
	 	<#= SampleDataTable.ToAstTableNode(Schema).GetBiml #>
 	</Tables>
</Biml>
<#+ 	Public Function SampleDataTable() As DataTable
	
		Dim DT As DataTable 
 		DT = New DataTable("Sampletable") 
		Dim colInt32 As DataColumn = New DataColumn("Column_1") 
		colInt32.DataType = System.Type.GetType("System.Int32")
		DT.Columns.Add(colInt32)
		Dim colBoolean As DataColumn = New DataColumn("Column_2") 
		colBoolean.DataType = System.Type.GetType("System.Boolean")
	
		DT.Columns.Add(colBoolean)
		Dim colDateTime As DataColumn = New DataColumn("Column_3") 
		colDateTime.DataType = System.Type.GetType("System.DateTime") 
		DT.Columns.Add(colDateTime)
		Dim colDecimal As DataColumn = New DataColumn("Column_4") 
		colDecimal.DataType = System.Type.GetType("System.Decimal") 
		DT.Columns.Add(colDecimal)
		Dim ColString As DataColumn = New DataColumn("Column_5") 
		ColString.DataType = System.Type.GetType("System.String") 
		ColString.maxlength=400
		DT.Columns.Add(ColString)
		Return DT
	End Function
	 #>
 

Any questions or comments? We’d love to hear from you at biml@solisyon.de!

Further Information on Biml in English can be found on our English Biml Page.

Happy Biml’ing!

Haben Sie hierzu Fragen oder Anmerkungen? Wir freuen uns auf Ihren Input unter biml@solisyon.de!

Weitere Informationen zu Biml, einschließlich Terminen und Blog Beiträgen finden Sie auch auf unserer Biml Seite.

Viel Spaß beim Biml’n!

Facebook