В C # .Net первичный ключ установлен для DataTable, но выбрасывается исключение «Таблица не имеет первичного ключа» - PullRequest
0 голосов
/ 22 ноября 2011

Точное исключение: «System.Data.MissingPrimaryKeyException», возникшее в System.Data.dll

Дополнительная информация: Таблица не имеет первичного ключа.

Однако я установилпервичный ключ.Это код.Благодарю.

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

Ответы [ 2 ]

0 голосов
/ 18 сентября 2016

Я не знаю, отвечает ли это на ваш вопрос, так как ваш код не содержит DataView, возможно, вы его не указали, поскольку не думали, что это важно в примере.

Однако, превращая таблицу в DataView, а затем обратно ToTable(), удаляет PrimaryKey.

0 голосов
/ 22 ноября 2011

Я не уверен на 100%, но я полагаю, что вы не добавите первичный ключ, пока не будут установлены все остальные столбцы.

Другими словами, переместите firstLinesDT.PrimaryKey = PrimaryKeyColumns;, чтобы быть после точки, гдеВы добавляете столбец FilePath.

...