Pertanyaan Bagaimana cara menghapus datatable dari dataset (memiliki banyak hubungan)


Saya mencoba menghapus datatable yang dimuat ke dalam dataset, dan telah dikaitkan. Ini kode yang saya coba.

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;

Ini melempar pengecualian pada titik menghapus tabel, karena kendala foreign-key yang ada. Sayangnya, cara logikanya adalah saya tidak tahu apa nama dari kendala itu [jadi saya tidak bisa mengkodekannya].

Apakah ada cara lain untuk mencapai hal ini dengan cara yang lebih mudah, atau saya bisa mendapatkan beberapa saran tentang cara mencari dan menghapus kendala yang menyebabkan masalah saya.

Terima kasih sebelumnya, Steve

--------------------------MENJAWAB----------------------- -

Saya tidak diizinkan menjawab pertanyaan saya sendiri jadi inilah solusi yang saya dapatkan. Cuplikan kode ini sekarang berfungsi untuk saya. Saya harus melakukan perjalanan relasi ke meja lain dan menghapus kendala dari sana.

    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"); 
    }

10
2017-09-02 17:20


asal


Jawaban:


sebelum Anda menghapus tabel dari kumpulan data mencoba untuk menghapus semua batasannya, sesuatu seperti ini:

domain.Tables["TABLE_NAME"].Constraints.Clear();

harus berfungsi dan Anda kemudian harus dapat menghapusnya dari kumpulan data.

jika Anda memiliki masalah dengan Kendala PK yang tidak dapat dihapus coba ini:

        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]);
            }
        }

5
2017-09-02 17:46



Inilah yang berhasil untuk saya:

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();

1
2018-02-09 08:11



Jawaban Anda benar Tapi tabel tidak dihapus dari Dataset .. Masih tetap jika pengguna ingin membuat nama tabel yang sama .. maka itu akan menampilkan Tabel ada ..

if (domain.Table ["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"); 
}

0
2018-04-06 04:37



Jika Anda mendapatkan kesalahan ForeignKey Constraint, Pertama menghapus tabel anak dari DataSet dan kemudian tabel induk.

Salam, Vinay


0
2018-04-08 06:29



Penggalian kuburan, tetapi tekan saja ini dan perlu menghapus beberapa tabel yang juga memiliki tabel turunan, sehingga memunculkan metode ekstensi DataSet:

public static void RemoveTable(this DataSet dataSet, string tableName)
{
    if (!dataSet.Tables.Contains(tableName))
    {
        throw new ArgumentException($"Table {tableName} doesn't exist in DataSet");
    }
    var relations = new DataRelation[dataSet.Tables[tableName].ChildRelations.Count];
    dataSet.Tables[tableName].ChildRelations.CopyTo(relations, 0);
    foreach (DataRelation relation in relations)
    {
        RemoveTable(dataSet, relation.ChildTable.TableName);
    }
    dataSet.Tables[tableName].ChildRelations.Clear();
    dataSet.Tables[tableName].ParentRelations.Clear();
    dataSet.Tables[tableName].Constraints.Clear();
    dataSet.Tables.Remove(tableName);
}

0
2017-07-12 07:43