Вставка данных, но с ошибкой «повторяющиеся значения» - PullRequest
0 голосов
/ 15 января 2011

Я пытаюсь вставить в базу данных Access, и вставка прошла успешно (когда я открываю базу данных, данные там есть), но я получаю сообщение об ошибке: «Запрошенные вами изменения в таблице не увенчались успехом, потому что они создаст дубликаты значений в индексе, первичном ключе или отношении. Измените данные в поле или полях, содержащих дублирующиеся данные, удалите индекс или переопределите индекс, чтобы разрешить дублирование записей, и повторите попытку. "

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

Protected Sub Wizard1_FinishButtonClick(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs) Handles Wizard1.FinishButtonClick
    'Collect Data
    Dim myDept = txtDept.Text
    Dim myFirst = txtFirstName.Text
    Dim myLast = txtLastName.Text
    Dim myPrefix = txtCoursePrefix.Text
    Dim myNum = txtCourseNum.Text

    'Define Connection
    Dim myConn As New OleDbConnection
    myConn.ConnectionString = AccessDataSource1.ConnectionString

    'Create commands
    Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, ?, ?, ?, ?)", myConn)

    myIns1.Parameters.AddWithValue("@myDept", myDept)
    myIns1.Parameters.AddWithValue("@myFirst", myFirst)
    myIns1.Parameters.AddWithValue("@myLast", myLast)
    myIns1.Parameters.AddWithValue("@myPrefix", myPrefix)
    myIns1.Parameters.AddWithValue("@myNum", myNum)

    'Execute the commands
    myConn.Open()
    myIns1.ExecuteNonQuery()
End Sub

Ответы [ 3 ]

0 голосов
/ 15 января 2011

Я не могу быть уверен без тестирования на вашей БД, но эта строка

Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, ?, ?, ?, ?)", myConn)

Похоже, было бы лучше, как:

Dim myIns1 As New OleDbCommand("INSERT INTO tableCourse (department, name_first, name_last, prefix, course_number) VALUES (?, '?', '?', '?', ?)", myConn)

Другими словами, строки должны быть в одинарных кавычках, а числа отправляться без кавычек.

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

Другими словами, взгляните на ваши «Отношения».

0 голосов
/ 07 августа 2011

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

0 голосов
/ 15 января 2011

Я не знаком с Access, поэтому сначала я разместил его только как комментарий.Но эта kb-статья звучит разумно.Вы должны установить поле autonumber на текущий максимум + 1.

ALTER TABLE TableName ALTER COLUMN AutoNumFieldName COUNTER(iMaxID,1); 

Стоит попробовать.Я все равно не знаю, почему он работает.

...