检查 DataTable 中是否存在列

Check if column exists in DataTable

为了检查我的 Microsoft Access 数据库中的 table 中是否存在列,我使用 VB.net:

编写了这段代码
       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    

但是 运行 虽然例如第一列(名为 Tif)已经存在,但它仍然会尝试添加它并继续在 System.Data.dll 中给出异常 'System.Data.OleDb.OleDbException'("Field 'Tif' already exists in table 'Data'."), 停止循环。

如有任何帮助,我们将不胜感激!

最后我自己解决了这个问题。显然,我所需要的只是使用 DataRow 填充数组并查看当前项目是否包含在其中。

这里是任何感兴趣的人的代码:

 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