2011-08-09 13 views
9

¿Hay alguna forma de eliminar la clave primaria de la tabla de datos? ¿O hay alguna manera de eliminar primero las restricciones de "PK" y luego eliminar la columna?Eliminar clave principal en la tabla de datos

Gracias!

Actualizado:

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

Qué base de datos? Por favor considera tus etiquetas. –

+3

he mencionado datatable en la pregunta. Lo que significa que la tabla de datos asp.net –

+1

.NET's System.Data.DataTable, porque no pertenece únicamente a ASP.NET. –

Respuesta

19

Puede retirar la llave primay usando

DataTable.PrimaryKey = null; 

puede eliminar columna de la tabla de datos utilizando

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

¿eliminaría esto la columna o la restricción? Si luego, ¿cómo eliminar la columna? –

+0

@ Power Xor: he editado mi respuesta –

+0

gracias! ¡eso funciona! Pero si lo vuelvo a agregar (¡lo necesito de esa manera!) Se está arrojando un error de "estas columnas actualmente no tienen valores únicos". He actualizado mi pregunta con el código. –

2

me encontré con que a veces después de la eliminación de PrimaryKey de un DataTable :

MyDataTable.PrimaryKey = null; 

la configuración única sigue siendo verdadera en las columnas miembro de la clave primaria eliminada.

Mi solución:

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

¿por qué este código tan largo? por qué no usar foreach como 'foreach (DataColumn dac en LocDataTable.Columns) dac.Unique = false;' – Sijav

Cuestiones relacionadas