Skip to main content
September 7, 2022
Solved

What does ' DataTable already belongs to another DataSet.' error mean an how to fix?

  • September 7, 2022
  • 3 replies
  • 0 views

I have a data adapter that calls a BR that calls one of the IC methods (I thinned it down here) but what I run the data adapter I get the error that the datatable already belongs to another dataset.  Any help on what that means and how to resolve?


mgreenberg_0-1662560189637.png

Public Shared Function IntercompanyReportBudget(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardDataSetArgs) As DataTable
Dim Threshold As Integer = args.NameValuePairs.XFGetValue("Threshold")
Dim dtInterCoBud As New DataTable

Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
Dim interCoMethodQuery As String = "{|WFProfile|}{|WFScenario|}{|WFTime|}{}{C#USD}{V#YTD}{}{" & Threshold & "}{}{}{}{}"
dtInterCoBud = BRApi.Database.ExecuteMethodCommand(dbConnApp, XFCommandMethodTypeId.ICMatchingForWorkflowUnitMultiPlug, interCoMethodQuery, "ICBud", Nothing).Tables(0)

End Using
Return dtInterCoBud
End Function

Best answer by MarcusH

I have just had the same error and I eventually fixed it. I am putting the solution here in case anyone else has the same error.

You need to take a copy of the table. So instead of this:

dtInterCoBud = BRApi.Database.ExecuteMethodCommand(dbConnApp, XFCommandMethodTypeId.ICMatchingForWorkflowUnitMultiPlug, interCoMethodQuery, "ICBud", Nothing).Tables(0)

add .Copy() to the end so it is like this:

dtInterCoBud = BRApi.Database.ExecuteMethodCommand(dbConnApp, XFCommandMethodTypeId.ICMatchingForWorkflowUnitMultiPlug, interCoMethodQuery, "ICBud", Nothing).Tables(0).Copy()

3 replies

September 7, 2022

Hi there!
I think the error could come from 2 places.

Can you rename your Function to IntercompanyReportBudget2 ?
Your other dt to dtInterCoBud2 ?



Public Shared Function IntercompanyReportBudget2(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardDataSetArgs) As DataTable
Dim Threshold As Integer = args.NameValuePairs.XFGetValue("Threshold")
Dim dtInterCoBud2 As New DataTable

Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDbConnInfo(si)
Dim interCoMethodQuery As String = "{|WFProfile|}{|WFScenario|}{|WFTime|}{}{C#USD}{V#YTD}{}{" & Threshold & "}{}{}{}{}"
dtInterCoBud2 = BRApi.Database.ExecuteMethodCommand(dbConnApp, XFCommandMethodTypeId.ICMatchingForWorkflowUnitMultiPlug, interCoMethodQuery, "ICBud", Nothing).Tables(0)

End Using
Return dtInterCoBud2
End Function
September 7, 2022

So I stole some code from another BR we had that was putting the method call into a temp table and then copying it to the table that got returned and now I am not getting the error anymore. So Strange - not sure why it needs to be that way

 

Dim tempTable As DataTable = BRApi.Database.ExecuteMethodCommand(dbConnApp, XFCommandMethodTypeId.ICMatchingForWorkflowUnitMultiPlug, interCoMethodQuery, "ICBud", Nothing).Tables(0)
If (dtInterCoBud2 Is Nothing) Then
dtInterCoBud2 = tempTable.Copy
Else
dtInterCoBud2.Merge(tempTable)
End If

Employee
September 8, 2022

Could you try changing your original code from

Dim dtInterCoBud As New DataTable

to

Dim dtInterCoBud As DataTable

MarcusHAnswer
August 21, 2023

I have just had the same error and I eventually fixed it. I am putting the solution here in case anyone else has the same error.

You need to take a copy of the table. So instead of this:

dtInterCoBud = BRApi.Database.ExecuteMethodCommand(dbConnApp, XFCommandMethodTypeId.ICMatchingForWorkflowUnitMultiPlug, interCoMethodQuery, "ICBud", Nothing).Tables(0)

add .Copy() to the end so it is like this:

dtInterCoBud = BRApi.Database.ExecuteMethodCommand(dbConnApp, XFCommandMethodTypeId.ICMatchingForWorkflowUnitMultiPlug, interCoMethodQuery, "ICBud", Nothing).Tables(0).Copy()

April 10, 2024

Thanks Marcus, it was really helpful!