在C#.Net中,为DataTable设置了主键,但抛出了“表没有主键”的异常

时间:2011-11-21 22:11:18

标签: c# datatable primary-key datacolumn

确切的例外是 System.Data.dll

中发生'System.Data.MissingPrimaryKeyException'

附加信息:表没有主键。

但是,我已经设置了主键。这是代码。谢谢。

DataColumn[] PrimaryKeyColumns; //Global
DataTable firstLinesDT = new DataTable();
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "FirstLines";
column.Unique = true;
firstLinesDT.Columns.Add(column);

PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = column;
firstLinesDT.PrimaryKey = PrimaryKeyColumns;  

column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "Length";
firstLinesDT.Columns.Add(column);

column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "FilePath";
firstLinesDT.Columns.Add(column);

**// EXCEPTION THROWN AT FIND OPERATION** 
DataRow foundRow = firstLinesDT.NewRow();
foundRow = firstLinesDT.Rows.Find(line);

根据msdn,这究竟是如何设置主键的 - http://msdn.microsoft.com/en-us/library/system.data.datatable.primarykey.aspx

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,PrimaryKey.Length为0,因为我在用适配器的行填充DataTable之前声明了Primary keys数组。尝试先用数据填充

答案 1 :(得分:0)

我不是100%肯定,但我相信在设置所有其他列之前不会添加主键。

换句话说,将firstLinesDT.PrimaryKey = PrimaryKeyColumns;移到要添加FilePath列的位置之后。

答案 2 :(得分:0)

我不知道这是否会回答您的问题,因为您的代码不包含DataView,您可能会将其遗漏,因为您认为这不是重要的。

但是,将表转换为DataView,然后返回ToTable(),将删除PrimaryKey。