2011-11-21 47 views
0

確切的例外情況是 System.Data.dll中出現'System.Data.MissingPrimaryKeyException'在C#.Net中,爲DataTable設置了主鍵,但引發了「表沒有主鍵」異常

附加信息:表沒有主鍵。

但是,我已經設置了主鍵。這是代碼。謝謝。

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,主鍵這究竟是如何應該是SET- http://msdn.microsoft.com/en-us/library/system.data.datatable.primarykey.aspx

+1

這並不能真正幫助您找出問題所在,但所給出的代碼對我來說很有效。它沒有在Find調用中拋出異常。 –

+0

你有什麼.NET版本? – NotMe

+0

.NET Framework 3.5。 Arrgh! – PixelatedPixie

回答

0

我不是100%肯定,但我相信你不添加主鍵,直到所有其他列都已設置。

換句話說,將firstLinesDT.PrimaryKey = PrimaryKeyColumns;移動到添加FilePath列的位置之後。

+0

嗯,我在開始時嘗試過,它沒有工作,然後我轉移了我的代碼,它看起來像上面的代碼。底線 - >兩者都不起作用:| – PixelatedPixie

0

我不知道這是否會回答您的問題,因爲您的代碼不包含DataView,可能是因爲您認爲它在示例中不重要,您可能會將其遺漏。

但是,將錶轉換爲DataView,然後返回ToTable()將刪除PrimaryKey。