2011-08-09 114 views
9

là có cách nào để loại bỏ khóa chính khỏi dữ liệu có được không hoặc có cách nào để loại bỏ các ràng buộc của "PK" trước và sau đó loại bỏ chính cột đó không?Xóa khóa chính trong datatable

Cảm ơn!

CẬP NHẬT:

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

Những cơ sở dữ liệu? Vui lòng xem xét các thẻ của bạn. –

+3

tôi đã đề cập đến datatable trong câu hỏi. Có nghĩa là asp.net datatable –

+1

.NET.Data.DataTable của .NET, vì nó không thuộc về ASP.NET. –

Trả lời

19

Bạn có thể loại bỏ chìa khóa primay sử dụng

DataTable.PrimaryKey = null; 

bạn có thể xóa bảng cột dữ liệu sử dụng

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

điều này sẽ loại bỏ cột hoặc ràng buộc? Nếu sau đó, làm thế nào để loại bỏ cột? –

+0

@Xóa điện: Tôi đã chỉnh sửa câu trả lời của mình –

+0

cảm ơn! hoạt động! Nhưng nếu tôi đang thêm nó một lần nữa (tôi cần theo cách đó!) Nó đã ném một lỗi "Những cột này hiện không có giá trị duy nhất". Tôi đã cập nhật câu hỏi của mình bằng mã. –

2

tôi thấy rằng đôi khi sau khi gỡ bỏ PrimaryKey từ một DataTable :

MyDataTable.PrimaryKey = null; 

Cài đặt duy nhất vẫn đúng trên các cột thành viên của Khóa chính đã xóa.

Giải pháp của tôi:

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

tại sao mã dài này? tại sao không sử dụng foreach như 'foreach (DataColumn dac trong LocDataTable.Columns) dac.Unique = false;' – Sijav

Các vấn đề liên quan