Как удалить данные из набора данных (имеет кучу взаимосвязей)
Я пытаюсь удалить datatable, который был загружен в набор данных, и был связан.
Вот код, который я попытался сделать.
domain.EnforceConstraints = false;
if (domain.Tables["TABLE_NAME"] != null)
{
domain.Tables["TABLE_NAME"].ChildRelations.Clear();
domain.Tables["TABLE_NAME"].ParentRelations.Clear();
domain.Tables.Remove("TABLE_NAME");
}
domain.EnforceConstraints = true;
Это создает исключение в момент удаления таблицы из-за существующего ограничения внешнего ключа. К сожалению, способ логики я понятия не имею, что такое имя ограничения [так что я не могу его жестко кодировать].
Есть ли возможность сделать это проще, или я могу получить некоторые предложения относительно того, как найти и удалить ограничение, вызывающее мою проблему.
Спасибо заранее, Стив
-------------------------- ОТВЕТ -------------------- ----
Мне не разрешили ответить на мой вопрос, так что вот решение, которое я придумал.
Этот фрагмент кода теперь работает для меня. Мне пришлось перемещаться по отношению к другой таблице и удалять ограничение оттуда.
if (domain.Tables["TABLE_NAME"] != null)
{
for (int f = domain.Tables["TABLE_NAME"].ChildRelations.Count -1; f >=0; f--)
{
domain.Tables["TABLE_NAME"].ChildRelations[f].ChildTable.Constraints.Remove(domain.Tables["TABLE_NAME"].ChildRelations[f].RelationName);
domain.Tables["TABLE_NAME"].ChildRelations.RemoveAt(f);
}
domain.Tables["TABLE_NAME"].ChildRelations.Clear();
domain.Tables["TABLE_NAME"].ParentRelations.Clear();
domain.Tables["TABLE_NAME"].Constraints.Clear();
domain.Tables.Remove("TABLE_NAME");
}
Ответы
Ответ 1
прежде чем удалять таблицу из набора данных, попробуйте очистить все ее константы, что-то вроде этого:
domain.Tables["TABLE_NAME"].Constraints.Clear();
должен работать, и вы должны затем удалить его из набора данных.
если у вас есть проблема с PK Constraint, которая не может быть удалена, попробуйте это:
var myTable = domain.Tables["TABLE_NAME"];
for (int i = myTable.Constraints.Count - 1; i >= 0; --i)
{
if (myTable.Constraints[i] is System.Data.ForeignKeyConstraint)
{
myTable.Constraints.Remove(myTable.Constraints[i]);
}
}
Ответ 2
Вот что сработало для меня:
DataTable table = dataSet.Tables["TABLE_NAME"];
while (table.ChildRelations.Count > 0)
{
var relation = table.ChildRelations[0];
dataSet.Tables[relation.ChildTable.TableName].Constraints.Remove(relation.RelationName);
dataSet.Relations.Remove(relation);
}
while (table.ParentRelations.Count > 0)
{
dataSet.Relations.Remove(table.ParentRelations[0]);
}
table.Constraints.Clear();
dataSet.Tables.Remove(table);
table.Dispose();
Ответ 3
Ваш ответ правильный, но таблицы не удаляются из набора данных. Тем не менее он остается, если пользователь хочет создать одно и то же имя таблицы.. тогда он покажет, что таблица существует.
if (domain.Tables [ "TABLE_NAME" ]!= null) {
for (int f = domain.Tables["TABLE_NAME"].ChildRelations.Count -1; f >=0; f--)
{
domain.Tables["TABLE_NAME"].ChildRelations[f].ChildTable.Constraints.Remove(domain.Tables["TABLE_NAME"].ChildRelations[f].RelationName);
domain.Tables["TABLE_NAME"].ChildRelations.RemoveAt(f);
}
domain.Tables["TABLE_NAME"].ChildRelations.Clear();
domain.Tables["TABLE_NAME"].ParentRelations.Clear();
domain.Tables["TABLE_NAME"].Constraints.Clear();
domain.Tables.Remove("TABLE_NAME");
}
Ответ 4
Если вы получаете ошибку ForeignKey Constraint, сначала удалите дочерние таблицы из DataSet и затем родительской таблицы.
С уважением,
Вини