0

我正在使用 VB.Net 和 VS 2012。我有一个包含几个数据表的数据集。其中一个数据表有一个以 1 递增并以种子 0 开头的标识列。用户流程如下所示:

  1. 用户打开表单
  2. 表单显示datatable1,包括标识列
  3. 用户隐藏表单,datatable2被清空处理
  4. 用户重新打开表单,重新填充数据表,但标识列现在从之前停止的位置开始

我需要确保每次清除表时,标识列都会从 0 重新开始。我该怎么做?

编辑:这是数据表/数据集的一些背景知识。该数据集有一个包含 4 列的数据表。一个是种子为 0 的列,递增 1。称为 identitycol。数据集没有连接到数据库,这是它的填充方式:

    dsVW_BCL_DATA = GlobalVariables.acctInit.BCL_Data(GlobalVariables.intJudgeID, GlobalVariables.AppearanceDate) 'Pull data to a generic created dataset
    ChgltrDataSet.gridsource.Clear() 'clear table in project dataset (chgltrdataset)
    ChgltrDataSet.gridsource_backup.Clear() 'clear backup table in project dataset
    'MUST RESET IDENTITYCOL TO 0 'This is where I feel I should reset the identitycol
    ChgltrDataSet.gridsource.Merge(dsVW_BCL_DATA.Tables(0)) 'Merge existing table gridsource with generic created dataset
    frmFinBatchChrg2.gridFinancial.DataSource = Me.ChgltrDataSet.gridsource 'Set datasource
4

2 回答 2

1

我知道我回答这个问题为时已晚,但我刚刚用我的项目解决了同样的问题,所以有人可能会觉得它很有用。

此问题与DataSet 中的Identity 机制实现有关。为了正确重置数据表中的标识列,您必须按照特定顺序进行操作。以下代码解决了我的问题:

    myDataSet.Clear()
    myDataSet.myDataTable.Columns("ID").AutoIncrementStep = -1
    myDataSet.myDataTable.Columns("ID").AutoIncrementSeed = -1
    myDataSet.myDataTable.Columns("ID").AutoIncrementStep = 1
    myDataSet.myDataTable.Columns("ID").AutoIncrementSeed = 1 

    'Note: "ID" is the column name in the DataTable

如您所见,命令的顺序非常重要。首先,我们将列的 AutoIncrementStep 属性设置为 -1,然后将 AutoIncrementSeed 属性设置为 -1。之后,我们将它们设置回我们想要的位置,但顺序相同。

希望这可以帮助

于 2013-04-23T00:43:28.767 回答
0

DBCC CHECKIDENT('', RESEED, 0)

这会从 1 重新播种身份列

于 2013-02-04T09:19:18.373 回答