为什么Id(IDENTITY)列在Windows窗体应用程序中以-1开头?

时间:2017-01-25 16:16:22

标签: c# sql-server database winforms datagridview

这就是我所做的:

  • 创建了一个winforms项目

  • 添加了一个基于服务的数据库,其默认设置为

  • 创建表格并将Id设为IDENTITY (1,1)

  • 创建了一个链接到数据库的数据源

  • 将表格作为数据网格视图拖放到表单

  • 启动项目我看到Id设置为-1

为什么会这样?

1 个答案:

答案 0 :(得分:2)

您在DataGridView中看到的内容实际上是使用您的DataSet生成的。默认情况下,对于从数据库生成的 Identity 列,数据集使用AutoIncrementSeedAutoIncremenetStep-1

要更改此行为,您可以转到DataSet设计器并选择DataTable的关键列,然后在属性中将AutoIncrementSeedAutoIncremenetStep设置为{{ 1}}

为什么数据集设计师将AutoIncrementSeed和AutoIncrementStep设置为-1?

它尝试解决数据集生成的标识值与数据库生成的标识值之间可能存在的冲突。重现它试图解决的问题:

  1. 使用标识列创建一个新的空表(不尝试插入其中的值)。
  2. 从您的数据库中创建DataSet设计器。
  3. 1设计器中,选择DataSet的关键列,并将DataTable设置为AutoIncrementSeed,将0设置为AutoIncremenetStep
  4. 数据源窗口拖动您的表格并将其放在表单上并运行该程序。
  5. 输入2个值并按保存,您将获得1例外:

      

    专栏' Id'被限制为独特的。价值' 1'已经   本。