从数据表中删除主键

10

有没有办法从datatable中删除主键?或者先删除“PK”约束,然后再删除列本身?

谢谢!

更新:

 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;

哪个数据库?请考虑您的标签。 - Andreas Ågren
3
我已经在问题中提到了DataTable,它指的是ASP.NET的DataTable。 - xorpower
1
.NET的System.Data.DataTable,因为它不仅属于ASP.NET。 - Guillermo Gutiérrez
2个回答

25
您可以使用以下方法删除主键:
DataTable.PrimaryKey = null;

你可以使用以下方法删除数据表列

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

这会删除列还是约束?如果是后者,那么如何删除该列? - xorpower
谢谢!这个方法可行!但是如果我再次添加它(我需要这样做!),它会抛出一个“这些列目前没有唯一值”的错误。我已经在我的问题中更新了代码。 - xorpower
@Xor power:那么...这些列目前是否具有唯一值? - Heinzi
1
@Xor power:嗯,如果你移除这一列,那么其中的数值就会消失。并且如果之后重新添加该列,则其中包含的是默认值(该值不唯一)。 - Heinzi

2
我发现有时从 DataTable 中删除 PrimaryKey 后会出现以下情况:
MyDataTable.PrimaryKey = null;

独特的设置在已删除的主键的成员列上仍然有效。

我的解决方案:

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

为什么要写这么长的代码?为什么不使用foreach循环,像这样 'foreach(DataColumn dac in LocDataTable.Columns)dac.Unique = false;'? - Sijav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接