0

我正在尝试插入 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
4

3 回答 3

0

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

于 2011-08-07T19:39:50.057 回答
0

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

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

值得一试。我不知道为什么它仍然有效。

于 2011-01-15T01:07:39.313 回答
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 和另一个表之间可能存在关系,并且引用完整性可能会从相关表中生成错误。

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

于 2011-01-15T04:17:34.807 回答