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