Подтвердить что ты не робот

DataTable уже принадлежит другому DataSet

Эта ошибка возникает при добавлении одного типа данных из набора данных в другой . "DataTable уже принадлежит другому DataSet."

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))
4b9b3361

Ответ 1

Как и другие ответы, ошибка, которую вы видите, связана с тем, что DataTable, который вы пытаетесь добавить в DataSet, уже является частью другого DataSet.

Одним из решений является Copy DataTable и назначить копию другому DataSet.

dtCopy = dataTable.Copy()
ds.Tables.Add(dtCopy)

Скопированный DataTable будет иметь структуру и данные скопированного DataTable.

Если вам нужна структура DataTable, вызовите Clone.

dtCopy = dataTable.Clone()

Ответ 2

Принятый ответ не очень хорош. Клонирование всегда должно быть последним вариантом.

Вот путь вокруг проблемы, не налагая накладные расходы на клонирование.

        DataSet ds = GetData1();

        DataSet ds2 = GetData2();

        //Assuming you know you've got good data

            DataTable dt = ds2.Tables[0];
            ds2.Tables.Remove(dt);
            dt.TableName = "PortedTable";//you may need to change the table name to prevent conflicts
            ds.Tables.Add(dt);

Ответ 3

Попробуйте вызвать этот метод:

DataTable dt = dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0).Clone()

Это создаст копию DataTable и назначит ее целевой DataSet:

ds.Tables.Add(dt)

Ответ 4

Я предполагаю, что это означает, что DataTable принадлежит другому DataSet...

Вы можете сериализовать DataTable в XML, а затем десериализовать его в свой целевой DataSet.

Ответ 5

Я думаю, что u должен создать новый DataTable и импортировать структуру и данные в новую.

Ответ 6

Попробуйте скопировать таблицу с помощью метода DataTable.Copy() в случае, если это не типизированный DataSet. Этот метод создает новый экземпляр той же таблицы, чтобы он не принадлежал ни одному DataSet:

dim newTable как DataTable = oldTable.Copy() dim dv как DataView = newTable.DefaultView

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues ​​(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)). Таблицы (0))

Ответ 7

У меня была та же проблема, и я решил ее с помощью Remove. На мой взгляд, ваш код может быть следующим:

dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))

dsformulaValues.Tables.Remove(//I'm not sure to understand your code, so read this code line as only an input for your stuff. Please, consider my code below for more understanding.

Мой рабочий код был примерно таким:

DataTable myTable = new DataTable();

private void Save()
{
    DataSet myDataSet = new DataSet();
    myDataSet.Tables.Add(myTable);
    myDataSet.Tables.Remove(myTable);//This works
    myDataSet.WriteXml("myTable.xml");
}

private void buttonSave_Click(object sender, EventArgs e)
        {
          Save();
        }

Каждый раз, когда я нажимал кнопку buttonSave, появилось сообщение "DataTable уже принадлежит другому DataSet". После написания кода строки myDataSet.Tables.Remove(myTable);//This works приложение запущено без проблем, и теперь я могу нажать кнопку больше раз, не теряя значения myTable и без сообщения об ошибке.

Надеюсь, это поможет.

Ответ 8

Я нашел один поворот, надеюсь, что это поможет

_DataTable.TableName = _TableName
If _DataTable.DataSet IsNot Nothing Then
    _DataSet = _DataTable.DataSet
Else
    _DataSet = New DataSet
    _DataSet.Tables.Add(_DataTable)
End If

Как бы то ни было, даже если _DataTable является новым, но если он относится к предыдущей загруженной физической таблице, он становится тем, что DataTable наследует предыдущую конфигурацию.

Ответ 9

Простым способом является просто объединение таблицы следующим образом.

dsformulaValues.Merge(m_DataAccess.GetFormulaValues(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))

Ответ 10

dtCopy = dataTable.Copy() ds.Tables.Add(dtCopy)

Это решение также может быть записано в одну строку

ds.Tables.Add(dataTable.Copy());