检查 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
为了检查我的 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