删除记录时如何重设表的标识列?

时间:2019-04-07 07:49:15

标签: datagridview ado.net vb.net-2010 sqlcommandbuilder

我有一个Datagridview,其中填充了来自SQL Server的一些数据。这完全没有问题。

每次在表中插入或更新记录时,我都想重新分配表中名为IDENTITY的{​​{1}}列,但是IDS的顺序似乎不好,因为有时会删除记录。 / p>

在我的代码中,我使用“ SQLCOMMANDBUILDER”执行插入,更新或删除操作 操作。

我在下面尝试了以下代码,但是抛出了异常错误,提示“找不到表0”。

我应该在哪里修复?

CarID

1 个答案:

答案 0 :(得分:0)

我越来越努力,最后我发现了-;

  1. 您需要创建一个新的数据集,Sqlcommandbuilder和新的数据适配器,然后进行查询
    表中的数据(使用select语句)同时执行命令 使用“单个查询字符串”重置ID。

  2. 执行两个命令的目的是将所有结果存储在SINGLE中 数据集

  3. 我决定从表中删除记录后再调用此子项。

代码:

// Button click to delete a record
 Try
        If ds.Tables(0).Rows.Count > 0 Then
            Dim rowposition As Integer = DgvCarList.CurrentRow.Index
            Dim rowdelete As DataRow = ds.Tables(0).Rows(rowposition)
            rowdelete.Delete()
            da.Update(ds)
            MessageBox.Show("Delete was success!", "Data")
            Loaddata()
        End If
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

  // After delete completed Go and reset an identity column 
    ResetIDColumn()


  // code to reset an identity column
 Sub ResetIDColumn()
    Try
        Dim querystring As String = "SELECT * FROM [dbo].[Cars] go " &
                                     "DECLARE @max INT " &
                        "Select @max=max([CarID]) FROM [dbo].[Cars]" &
                        "if @max IS NULL SET @max = 0 " &
                        "DBCC CHECKIDENT ('[Cars]', RESEED,@max)"
        ds = New DataSet
        da = New SqlDataAdapter(querystring, con)
        cmdbuilder = New SqlCommandBuilder(da)
        da.Fill(ds)
        DgvCarList.DataSource = ds.Tables(0)

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub


          ...................Thank you all..................................