vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Datenbanken · ADO.NET Allgemein   |   VB-Versionen: VB2005, VB2008, VB201014.01.12
Tabellen-Struktur einer SQL Tabelle dynamisch ermitteln

Ermitteln der Datentabellen-Struktur einer SQL Tabelle und speichern in ein DataTable-Objekt

Autor:   Dietrich HerrmannBewertung:  Views:  9.968 
ohne HomepageSystem:  Vista, Win7, Win8, Win10kein 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



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2019 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.