2010-08-25 149 views
13

我得到下面的异常使用find()方法表没有主键

线(丢失的主键)“表不具有主键。”

我重新检查了数据库,所有主键列都设置正确。

我的代码:

DataTable dt = p.GetAllPhotos(int.Parse(Id)); 
DataTable temp = new DataTable(); 
temp = dt.Clone(); 
temp = (DataTable)(Session["currentImage"]); 
DataTable dtvalid = new DataTable(); 
dtvalid = dt.Clone(); 
DataRow[] drr = new DataRow[1]; 
drr[0] = dt.Rows.Find((int.Parse(temp.Rows[0]["photoId"].ToString()))+1); 
foreach (DataRow dr in drr) 
{ 
    dtvalid.ImportRow(dr); 
} 
dtvalid.AcceptChanges();' 
+0

的挫折感是你想达到什么目的? – 2010-08-25 15:30:55

回答

29

您需要在调用前将的DataTable对象的的PrimaryKey财产查找

DataColumn[] keyColumns = new DataColumn[1]; 
keyColumns[0] = dt.Columns["<columnname>"]; 
dt.PrimaryKey = keyColumns; 
+0

非常感谢你,这是解决方案。 我认为这与我们应该在ASP.net中为某些控件标识数据键名称属性的情况相似 – 2010-08-25 17:58:23

+0

请小心您正确复制列名。我在代码中使用了DemoKey_pk,但存储过程返回了DemoKey_fk。由于DemoKey_pk没有被返回(DemoKey_fk是/),我的代码抛出了“表没有主键”异常。 – user2197446 2016-06-24 17:48:01