Как сбросить Identity Column Of Table при удалении записи? - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть Datagridview, который заполняется некоторыми данными из SQL Server.Это отлично работает без проблем на всех.

Каждый раз, когда я вставляю или обновляю записи в таблице, я хочу СБРОСИТЬ IDENTITY столбец с именем CarID таблицы, но последовательность IDS выглядит нехорошо, поскольку иногда записи удаляются.

В моем коде я использую 'SQLCOMMANDBUILDER' для выполнения операций вставки, обновления или удаления.

Я попробовал следующий код ниже, но выдает ошибку исключения, которая говорит: «Не удается найти таблицу 0."

Где мне починить ??

//THESE ARE CODE TO RESEED AN IDENTITY COLUMN

Sub ResetIDColumn()
    Try
        Dim querystring As String = "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

 //CODE TO PUPOLATE DATAGRIDVIEW
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) 
Handles MyBase.Load
    Try
        Dim querystring As String = "SELECT * FROM [dbo].[Cars]"
        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

//CODE TO INSERT OR UPDATE DATA

Private Sub btnUpdate_Click(sender As System.Object, e As System.EventArgs) Handles btnUpdate.Click
    ResetIDColumn()
    Try
        da.Update(ds.Tables(0))
        MessageBox.Show("Update was successful!", "Data")
        Loaddata()
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

//CODE TO LOAD DATA 
Sub Loaddata()
    Dim querystring As String = "SELECT * FROM [dbo].[Cars]"
    ds = New DataSet
    da = New SqlDataAdapter(querystring, con)
    cmdbuilder = New SqlCommandBuilder(da)
    da.Fill(ds)
    DgvCarList.DataSource = ds.Tables(0)
    DgvCarList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
End Sub

1 Ответ

0 голосов
/ 07 апреля 2019

Я старался изо всех сил и, наконец, я обнаружил, что -;

  1. Вам нужно создать новый набор данных, Sqlcommandbuilder и новый dataadapter, а затем запросить данные
    из вашей таблицы (используяодновременно с оператором select) выполните команду для сброса идентификатора с помощью 'singlestringstring'.

  2. Цель выполнения двух команд такова, что все результаты сохраняются в SINGLE DATASET

  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..................................
...