2017-10-09 1 views
0

Um existiert zu überprüfen, ob eine Spalte in einer Tabelle existiert in meinem Microsoft Access-Datenbank, schrieb ich diesen Code VB.net mit:Überprüfen Sie, ob Spalte in Datatable

 Dim conCreate As New OleDb.OleDbConnection(strCnn) 
     conCreate.Open() 
     Dim dbSchemaData As DataTable = conCreate.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, "Data", "TABLE"}) 
     conCreate.Close() 

     Dim row As DataRow 
     row = dbSchemaData.NewRow() 

       For arrItem As Integer = 0 To arrLine.Length - 1 

        If arrLine(arrItem) = "Image Filename with Full Path" And row.Table.Columns.Contains("Tif") = False Then 

         Dim cmdCol As New OleDb.OleDbCommand("ALTER TABLE [Data] ADD COLUMN [Tif] VARCHAR(255)", conCreate) 
         conCreate.Open() 
         cmdCol.ExecuteNonQuery() 
         conCreate.Close() 

        ElseIf arrLine(arrItem) = "Image side" And row.Table.Columns.Contains("Voorkant") = False Then 

         Dim cmdCol As New OleDb.OleDbCommand("ALTER TABLE [Data] ADD COLUMN [Voorkant] BIT", conCreate) 
         conCreate.Open() 
         cmdCol.ExecuteNonQuery() 
         conCreate.Close() 

        ElseIf arrLine(arrItem) = "Image size (bytes)" And row.Table.Columns.Contains("Bestandsgrootte") = False Then 

         Dim cmdCol As New OleDb.OleDbCommand("ALTER TABLE [Data] ADD COLUMN [Bestandsgrootte] NUMERIC", conCreate) 
         conCreate.Open() 
         cmdCol.ExecuteNonQuery() 
         conCreate.Close() 

        ElseIf row.Table.Columns.Contains(arrLine(arrItem)) = False Then 

         Dim cmdCol As New OleDb.OleDbCommand("ALTER TABLE [Data] ADD COLUMN [" & arrLine(arrItem) & "] VARCHAR(255)", conCreate) 
         conCreate.Open() 
         cmdCol.ExecuteNonQuery() 
         conCreate.Close() 

        End If 

       Next  

aber läuft diese während zum Beispiel der ersten Spalte (mit dem Namen Tif) existiert bereits, sie versucht immer noch, sie hinzuzufügen und fährt fort, die Ausnahme 'System.Data.OleDb.OleDbException' in System.Data.dll zu geben ("Feld 'Tif' existiert bereits in Tabelle 'Data'."), stoppt die Schleife.

Jede Hilfe wäre willkommen!

+0

Was ist die Ausnahme? – Jaxi

+0

'System.Data.OleDb.OleDbException' in System.Data.dll ("Feld 'Tif' existiert bereits in Tabelle 'Data'.") –

+0

Haben Sie den Debugger verwendet und in der Columns-Eigenschaft nachgesehen, welche Daten darin enthalten sind ? Möglicherweise wird die Columns-Eigenschaft nicht korrekt ausgefüllt. – Jaxi

Antwort

0

Ich löste schließlich das Problem selbst. Alles, was ich brauchte, war, eine DataRow zu benutzen, um ein Array zu füllen und zu sehen, ob das aktuelle Element darin enthalten war.

Hier ist der Code für jeden, der interessiert:

conCreate.Open() 
Dim schemaColumn As DataTable = conCreate.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, "Data"}) 
conCreate.Close()    

For arrItem As Integer = 0 To arrLine.Length - 1 

    Dim colCheck As Boolean 
    Dim rowArr As New ArrayList() 

    For Each row As DataRow In schemaColumn.Rows 

     rowArr.Add(row("COLUMN_NAME")) 

    Next 

    If rowArr.Contains(arrLine(arrItem)) Then 

     colCheck = False 

    Else 

     colCheck = True 

    End If 

    If colCheck = True Then 

     Dim cmdCol As New OleDb.OleDbCommand("ALTER TABLE [Data] ADD COLUMN [" & arrLine(arrItem) & "] VARCHAR(255)", conCreate) 
     conCreate.Open() 
     cmdCol.ExecuteNonQuery() 
     conCreate.Close() 

    End If 

Next 
Verwandte Themen