Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在Windows窗体应用程序中Id(标识)列以-1开头?_C#_Sql Server_Database_Winforms_Datagridview - Fatal编程技术网

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

C# 为什么在Windows窗体应用程序中Id(标识)列以-1开头?,c#,sql-server,database,winforms,datagridview,C#,Sql Server,Database,Winforms,Datagridview,这就是我所做的: 创建了一个winforms项目 添加了具有默认设置的基于服务的数据库 创建一个表并将Id设置为IDENTITY(1,1) 创建了链接到数据库的数据源 将表作为数据gridview拖放到窗体 启动项目我看到的是Id设置为-1 为什么会发生这种情况?您在DataGridView中看到的内容实际上是使用您的数据集生成的。默认情况下,数据集对从数据库生成的标识列使用AutoIncrementSeed和autoincrementstep到-1 要更改此行为,您可以转到数据集设计器,选

这就是我所做的:

  • 创建了一个winforms项目

  • 添加了具有默认设置的基于服务的数据库

  • 创建一个表并将
    Id
    设置为
    IDENTITY(1,1)

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

  • 将表作为数据gridview拖放到窗体

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


为什么会发生这种情况?

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

要更改此行为,您可以转到
数据集
设计器,选择
数据表
的键列,并在属性中,将
自动递增种子
自动递增步骤
设置为
1

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

它试图解决数据集生成的标识值和数据库生成的标识值之间可能存在的冲突。要重现它试图解决的问题,请执行以下操作:

  • 使用标识列创建一个新的空表(不尝试在其中插入值)
  • 从数据库创建数据集设计器
  • DataSet
    designer中,选择
    DataTable
    的键列,并将
    AutoIncrementSeed
    设置为
    0
    autoincrementstep
    设置为
    1
  • 将表格从“数据源”窗口拖到窗体上,然后运行程序
  • 输入2个值并按save,您将获得一个
    ConstraintException
    异常:

    列“Id”被约束为唯一。值“1”已存在 现在


  • 实际上,您在
    DataGridView
    中看到的内容是使用
    数据集生成的。默认情况下,数据集对从数据库生成的标识列使用
    AutoIncrementSeed
    autoincrementstep
    -1

    要更改此行为,您可以转到
    数据集
    设计器,选择
    数据表
    的键列,并在属性中,将
    自动递增种子
    自动递增步骤
    设置为
    1

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

    它试图解决数据集生成的标识值和数据库生成的标识值之间可能存在的冲突。要重现它试图解决的问题,请执行以下操作:

  • 使用标识列创建一个新的空表(不尝试在其中插入值)
  • 从数据库创建数据集设计器
  • DataSet
    designer中,选择
    DataTable
    的键列,并将
    AutoIncrementSeed
    设置为
    0
    autoincrementstep
    设置为
    1
  • 将表格从“数据源”窗口拖到窗体上,然后运行程序
  • 输入2个值并按save,您将获得一个
    ConstraintException
    异常:

    列“Id”被约束为唯一。值“1”已存在 现在


  • 这是从数据库创建数据表时数据集的默认行为。要更改此行为,可以转到
    数据集
    设计器,选择
    数据表
    的键列,并在属性中,将
    自动递增种子
    自动递增步骤
    设置为
    1
    。这是从数据库创建数据表时数据集的默认行为。要更改此行为,可以转到
    数据集
    设计器,选择
    数据表
    的键列,并在属性中,将
    自动递增种子
    自动递增步骤
    设置为
    1