DataTable уже принадлежит другому DataSet
Эта ошибка возникает при добавлении одного типа данных из набора данных в другой
. "DataTable уже принадлежит другому DataSet."
dsformulaValues.Tables.Add(m_DataAccess.GetFormulaValues
(dv.ToTable.DefaultView.ToTable(False, strSelectedCols)).Tables(0))
Ответы
Ответ 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());