2011-08-09 14 views
9

czy istnieje sposób na usunięcie klucza podstawowego z datatable Czy istnieje sposób, aby usunąć ograniczenia "PK" najpierw, a następnie usunąć samą kolumnę?Usunąć klucz podstawowy w datatable

Dzięki!

AKTUALIZACJA:

dtTable.Columns.Add(new System.Data.DataColumn("PRIMARY_KEY", typeof(System.Int32))); 
dtTable.PrimaryKey = new DataColumn[1] { dtTable.Columns["PRIMARY_KEY"] }; // throws an error 
dtTable.Columns["PRIMARY_KEY"].AutoIncrement = true; 
+0

Która baza? Proszę rozważyć swoje tagi. –

+3

Mam wspomnieć o datatable w pytaniu. Co oznacza, że ​​asp.net datatable –

+1

.NET's System.Data.DataTable, ponieważ nie należy wyłącznie do ASP.NET. –

Odpowiedz

19

można wyjąć kluczyk primay użyciu

DataTable.PrimaryKey = null; 

można usunąć kolumnę tabeli danych przy użyciu

DataTable.Columns.Remove("column name here"); 
+0

Czy usunąłaby to kolumna lub ograniczenie? Jeśli później, to jak usunąć kolumnę? –

+0

@Xor power: Edytowałem swoją odpowiedź –

+0

dzięki! to działa! Ale jeśli dodaję go ponownie (potrzebuję tego!), Generuje błąd "Te kolumny nie mają obecnie unikatowych wartości". Zaktualizowałem moje pytanie za pomocą kodu. –

2

stwierdziliśmy, że czasami po usunięciu primaryKey od DataTable :

MyDataTable.PrimaryKey = null; 

Ustawienie Unique pozostaje prawdziwe w kolumnach prętów usuniętego klucza PrimaryKey.

Moje rozwiązanie:

public static void KillPrimaryKey(DataTable LocDataTable) 
{ 
    int LocPriKeyCount = LocDataTable.PrimaryKey.Length; 
    string[] PrevPriColumns = new string[LocPriKeyCount]; 

    // 1. Store ColumnNames in a string Array 
    for (int ii = 0; ii < LocPriKeyCount; ii++) PrevPriColumns[ii] = LocDataTable.PrimaryKey[ii].ColumnName; 
    // 2. Clear PrimaryKey 
    LocDataTable.PrimaryKey = null; 
    // 3. Clear Unique settings 
    for (int ii = 0; ii < LocPriKeyCount; ii++) LocDataTable.Columns[PrevPriColumns[ii]].Unique = false; 
} 
+0

dlaczego ten długi kod? dlaczego nie używać foreach jako "foreach (DataColumn dac w LocDataTable.Columns) dac.Unique = false; ' – Sijav

Powiązane problemy