确切的例外是 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
答案 0 :(得分:1)
我遇到了同样的问题,PrimaryKey.Length为0,因为我在用适配器的行填充DataTable
之前声明了Primary keys数组。尝试先用数据填充
答案 1 :(得分:0)
我不是100%肯定,但我相信在设置所有其他列之前不会添加主键。
换句话说,将firstLinesDT.PrimaryKey = PrimaryKeyColumns;
移到要添加FilePath
列的位置之后。
答案 2 :(得分:0)
我不知道这是否会回答您的问题,因为您的代码不包含DataView
,您可能会将其遗漏,因为您认为这不是重要的。
但是,将表转换为DataView,然后返回ToTable()
,将删除PrimaryKey。