插入数据但得到“重复值”错误

时间:2011-01-15 00:16:47

标签: asp.net vb.net ms-access insert duplicate-data

我正在尝试插入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 :(得分:0)

我不熟悉Access,所以我首先只发表评论。但是this kb-article听起来很合理。您应该将自动编号字段设置为当前最大值+ 1。

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

值得一试。我不知道为什么它的工作。

答案 1 :(得分:0)

我不能确定你的数据库没有测试,但是这行

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)

换句话说,字符串应该是单引号,并且数字不带引号发送。

除此之外,看起来这个特定的Insert应该可以工作,但tableCourse和另一个表之间可能存在关系,并且引用完整性可能会从相关表中生成错误。

换句话说,看看你的“关系”。

答案 2 :(得分:0)

根据MS指示重新播种表对我不起作用。要求将旧的唯一索引更改为数字字段,并添加全新的唯一索引。幸运的是,索引没有链接到其他表,如果是这样的话,这将是一个庞大的集群,因为你不能将值导入字段,然后将该字段转换为自动编号,以便于自动创建索引。