设置PrimaryKey属性与数据库设置主键有什么区别?

qlz37238 2011-02-13 03:41:14

private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Server=.\SQLEXPRESS;Database=learn;Trusted_Connection=True");
SqlDataAdapter da = new SqlDataAdapter("select * from temp", con);
DataSet ds = new DataSet();
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Fill(ds);
DataColumn[] key = new DataColumn[] { ds.Tables[0].Columns[0] };
ds.Tables[0].PrimaryKey = key;
ds.Tables[0].Rows[0].Delete();
da.Update(ds);
}

提示 对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成。
不是说使用CommandBuilder类之前要设置一个主键吗?我已经设置了但是还是要报错。
如果是在数据库里面对一个字段设置成主键的话。代码改成

private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Server=.\SQLEXPRESS;Database=learn;Trusted_Connection=True");
SqlDataAdapter da = new SqlDataAdapter("select * from temp", con);
DataSet ds = new DataSet();
SqlCommandBuilder cb = new SqlCommandBuilder(da);
da.Fill(ds);
ds.Tables[0].Rows[0].Delete();
da.Update(ds);
}

那么就不会报错并且结果也是正确的。
我就是想问一下DataTable类的PrimaryKey属性到底有什么用呢?什么时候会用到这个属性?
...全文
403 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qlz37238 2011-02-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 doubleu2005 的回复:]
为了识别表中的记录,表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。——这个说的很清楚,就是要保证唯一性,一般是选择一列的,当如果一列无法包含足够的唯一值时就可以由多个列组成。
看看你的
DataColumn[] key = new DataColumn[] { ds.Tables[0].Columns[0] };
ds.Tables[0].Pr……
[/Quote]

也就是说代码可以写成这样?

DataColumn[] key = new DataColumn[] { ds.Tables[0].Columns[0],ds.Tables[0].Columns[1] };
ds.Tables[0].PrimaryKey = key;
doubleu2005 2011-02-14
  • 打赏
  • 举报
回复
为了识别表中的记录,表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。——这个说的很清楚,就是要保证唯一性,一般是选择一列的,当如果一列无法包含足够的唯一值时就可以由多个列组成。
看看你的
DataColumn[] key = new DataColumn[] { ds.Tables[0].Columns[0] };
ds.Tables[0].PrimaryKey = key;
是不是有问题?
qlz37238 2011-02-14
  • 打赏
  • 举报
回复
汗,1楼和2楼的回答。看得云里雾里的
yalan 2011-02-13
  • 打赏
  • 举报
回复
DataTable.PrimaryKey 属性,获取或设置充当数据表主键的列的数组。
为了识别表中的记录,表的主键必须唯一。表的主键还可以由两列或多列组成。这在单列无法包含足够的唯一值时发生。例如,两列主键可由“FirstName”和“LastName”列组成。因为主键可由多列组成,所以 PrimaryKey 属性由 DataColumn 对象的数组组成。

wuyq11 2011-02-13
  • 打赏
  • 举报
回复
为了支持自动生成指定的SelectCommand必须包含主键或唯一性列
DataAdapter 显式设置为 UpdateCommand

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧