Rubrik: Datenbanken · ADO.NET Allgemein | VB-Versionen: VB2005, VB2008, VB2010 | 14.01.12 |
Tabellen-Struktur einer SQL Tabelle dynamisch ermitteln Ermitteln der Datentabellen-Struktur einer SQL Tabelle und speichern in ein DataTable-Objekt | ||
Autor: Dietrich Herrmann | Bewertung: | Views: 12.580 |
ohne Homepage | System: Win7, Win8, Win10, Win11 | kein Beispielprojekt |
Die gezeigte Funktion kann dazu benutzt werden, um die Struktur einer bestehenden SQL-Datentabelle zu ermitteln und diese in einer Datentabelle für weitere Verwendung zu speichern. Ich habe sie unter SQLServer 2008R2 getestet und benutzt. Es wird vorausgesetzt, dass die SQL-Verbindung besteht und die Quelltabelle in der Datenbank existiert.
Imports System.Data.SqlClient ...
''' <summary> ''' Erstellen einer Datatable mit der Struktur einer SQL-Tabelle als Inhalt ''' </summary> ''' <param name="conn">geöffnetes SQL-Connection Object</param> ''' <param name="tabNameSrc">Name der Quelltabelle</param> ''' <param name="tabNameDest">Name der Zieltabelle im DataTable Objekt</param> ''' <param name="auswahlFlag">Flag für die Arbeitsweise true|false</param> ''' <returns>Zieltabelle mit der Struktur</returns> ''' <remarks>Es gibt zwei Arbeitsweisen der Funktion: ''' auswahlFlag=True: Es werden alle Columnnamen der SQL-Tabelle ermittelt, ''' die kein Primärschlüssel und nicht berechnete Spalten sind. ''' auswahlFlag=False: Es werden alle Columns mit Name, Datentyp, maximale Zeichenzahl, ''' numerische Genauigkeit, numerische Größe ermittelt.</remarks> Public Function TableStructureTable(ByVal conn As SqlConnection, _ ByVal tabNameSrc As String, _ ByVal tabNameDest As String, _ Optional ByVal auswahlFlag As Boolean = True) As DataTable Dim sSQL As String If auswahlFlag Then sSQL = "SELECT a.name as column_name " & _ "FROM sys.columns AS a " & _ "INNER JOIN sys.all_objects AS b ON a.object_id = b.object_id " & _ "WHERE (a.object_id > 100) AND (b.type_desc = 'USER_TABLE') AND " & _ "(b.name LIKE @TableName) AND " & _ "(a.is_computed = 'false') AND (a.is_identity = 'false')" Else sSQL = "SELECT column_name, data_type, character_maximum_length, " & _ "numeric_precision, numeric_scale " & _ "FROM information_schema.COLUMNS " & _ "WHERE table_name LIKE @TableName " & _ "ORDER BY ordinal_position" End If Dim cmd As New SqlCommand(sSQL, conn) cmd.Parameters.AddWithValue("@TableName", tabNameSrc) Dim adp As New SqlDataAdapter(cmd) Dim struct As New DataTable(tabNameDest) Try With adp .Fill(struct) .Dispose() End With Catch ex As Exception MessageBox.Show(ex.Message.ToString, "FEHLER", _ MessageBoxButtons.OK, MessageBoxIcon.Error) Return Nothing End Try Return struct End Function
Aufrufbeispiel:
Dim tempT As DataTable = _ TableStructureTable(myConnection, "mySourceTableName", "tempStructure") ' Inhalt des DataTable-Objekts in einem DataGridView anzeigen DataGridView1.DataSource = tempT