Member 11856456 Ответов: 2

Возникли проблемы с использованием простого приращения столбца ID


Итак моя проблема в том что когда я делаю начальную запись добавления программа которую я делаю автоматически пропускает первую которая является ID 1 и начинает добавлять вот так 2, 3, 4, 5, 6.

вот мой код:

Dim i As Integer = 0
      I += 1


      Try
          Dim sqlcon As New SqlConnection("mysqlstring")
          Dim sqladapt = New SqlDataAdapter("Select * from [Table]", sqlcon)

          sqlcon.Open()
          Dim cmd As SqlClient.SqlCommand
          Dim sql As String = "insert into [Table] values(@ID,@Question,@Answers,@Howtowork,@Chapter)"
          cmd = New SqlClient.SqlCommand(sql, sqlcon)

          ' Make sure that all tables have the same type of information that can be entered, if not you will recieve an error.
          cmd.Parameters.AddWithValue("@ID", DataGridView1.Rows.Count + I)
          cmd.Parameters.AddWithValue("@Question", TextBox2.Text)
          cmd.Parameters.AddWithValue("@Answers", TextBox3.Text)
          cmd.Parameters.AddWithValue("@Howtowork", TextBox4.Text)
          cmd.Parameters.AddWithValue("@Chapter", TextBox5.Text)

          cmd.ExecuteNonQuery()
          sqlcon.Close()

          MessageBox.Show("New Record Added")

      Catch ex As Exception


      End Try


Я подумал, что это, вероятно, простое решение, которое я не вижу. Все, что я пытаюсь сделать, это добавить в уникальный столбец ID с шагом 1. моя база данных должна начинаться с 1 и идти оттуда.

Что я уже пробовал:

Поэтому я попытался вставить первую запись, просто добавив ее в таблицу вручную перед началом отладки. Вот что происходит 1, 3, 4, 5, 6. независимо от того, где я пытаюсь начать запись, она всегда пропускает одну, а после пропуска все в порядке.

[no name]

Используйте фактический столбец идентификаторов в своей базе данных, и вам вообще не придется иметь с этим дело. Вот для чего нужны эти колонки.

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Проблема в том, что вы позволяете пользователям вводить идентификационные номера для записей. Ты никогда так не поступаешь.

Столбец ID должен быть столбцом автоматической нумерации или автоматического приращения. Вы позволяете базе данных генерировать и назначать значения идентификаторов.

Проблема с тем, чтобы позволить вашему коду делать это, заключается в том, что если у вас есть несколько пользователей, выполняющих код одновременно, несколько пользователей могут запросить базу данных, чтобы найти максимальное значение идентификатора, которое было использовано. Несколько клиентов могут получить одно и то же значение. Затем эти клиенты увеличивают значение идентификатора и пытаются присвоить двум разным записям одно и то же значение идентификатора. Это действительно плохо.

Так что ты этого не сделаешь. Вы позволяете базе данных обрабатывать генерируемые значения идентификаторов, а не клиенту.


Рейтинг:
1

Peter Leow

Прочтите решение Дейва и проверьте это: SQL автоматическое увеличение поля[^]