Reputation: 1678
What I have is functioning 100%, however I'm wondering if there is a cleaner, more effcient, or higher readability way to do this, or if checking one by one is the way to go.
If XMLDataSet.Tables.Contains(CabinetTable.TableName) Then
XMLDataSet.Tables.Remove(CabinetTable.TableName)
XMLDataSet.Tables.Add(CabinetTable)
Else
XMLDataSet.Tables.Add(CabinetTable)
End If
If XMLDataSet.Tables.Contains(DocTypeTable.TableName) Then
XMLDataSet.Tables.Remove(DocTypeTable.TableName)
XMLDataSet.Tables.Add(DocTypeTable)
Else
XMLDataSet.Tables.Add(DocTypeTable)
End If
If XMLDataSet.Tables.Contains(IndexTable.TableName) Then
XMLDataSet.Tables.Remove(IndexTable.TableName)
XMLDataSet.Tables.Add(IndexTable)
Else
XMLDataSet.Tables.Add(IndexTable)
End If
If XMLDataSet.Tables.Contains(CabinetToTypeTable.TableName) Then
XMLDataSet.Tables.Remove(CabinetToTypeTable.TableName)
XMLDataSet.Tables.Add(CabinetToTypeTable)
Else
XMLDataSet.Tables.Add(CabinetToTypeTable)
End If
If XMLDataSet.Tables.Contains(TypeToIndexTable.TableName) Then
XMLDataSet.Tables.Remove(TypeToIndexTable.TableName)
XMLDataSet.Tables.Add(TypeToIndexTable)
Else
XMLDataSet.Tables.Add(TypeToIndexTable)
End If
I presume I could make a sub to do this, something like:
Private Sub addRemoveDataTable(ByRef ds As DataSet, ByVal dt As DataTable)
If ds.Tables.Contains(dt.TableName) Then
ds.Tables.Remove(dt.TableName)
End If
ds.Tables.Add(dt)
End Sub
But I'd still have to call that for every DataTable so I don't see it being any more efficient.
I completely forgot about using a paramarray for the data tables...
Private Sub addRemoveDataTable(ByRef ds As DataSet, ByVal ParamArray dTable() As DataTable)
For Each dt As DataTable In dTable
If ds.Tables.Contains(dt.TableName) Then
ds.Tables.Remove(dt.TableName)
End If
ds.Tables.Add(dt)
Next
End Sub
However each iteration of the For loop is just having called one of the sets in the first option, So I still can't see much improvement in efficiency. but this option is easier to read and quite a bit more flexible.
Upvotes: 0
Views: 194
Reputation: 3112
Depending on how you feel about extension methods, you could add an extension method to DataSet
.
Imports System.Runtime.CompilerServices
Module ExtensionMethods
<Extension> Public Sub Replace(ByVal dataSet As DataSet, ByVal dataTable As DataTable)
If dataSet.Tables.Contains(dataTable.TableName) Then
dataSet.Tables.Remove(dataTable.TableName)
End If
dataSet.Tables.Add(dataTable)
End Sub
End Module
And then your code would become:
XMLDataSet.Replace(CabinetTable)
XMLDataSet.Replace(DocTypeTable)
XMLDataSet.Replace(IndexTable)
'...
Upvotes: 2
Reputation: 4696
Less code? (Call your method using a For Each loop)
For Each t in XMLDataSet.Tables
addRemoveDataTable(XMLDataSet,t)
Next
...
Private addRemoveDataTableSub(ByRef ds As DataSet, ByVal dt As DataTable)
If ds.Tables.Contains(dt.TableName) Then
ds.Tables.Remove(dt.TableName)
End If
ds.Tables.Add(dt)
End Sub
Upvotes: 2