在任何人开始喊叫之前#34;重复",让我说我已经彻底搜索了这个问题的解决方案,但没有找到解决方案。
背景信息:我试图从使用Visual Basic 2010 Express编译的Windows窗体程序(exe)插入Access 2003数据库中的一个小表。
在同一个数据库中执行了四个插入语句,每个插入语句在不同的表上,但前三个工作没有问题,它是第四个抛出错误:
cmd = New OleDbCommand("INSERT INTO PrivateTableName
VALUES('" & Serial.Text & "','Pending',
'" & coverArea.Text & "','')", myConnection)
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox("Error attempting to insert into PrivateTableName " & ex.ToString)
Exit Sub
End Try
我出于隐私目的更改了表名,但请放心,表名无关紧要。
此语句抛出异常
您向表格请求的更改未成功,因为它们会在索引,主键或关系中创建重复值
错误本身是不言自明的,然而,完全不可能。下面是表格设计的屏幕截图
请注意,主键不是自动递增的数字。主键是一个序列号(或者更确切地说是一个字符串),它由一个5位数字(从前一个顺序索引)和两个随机生成的字母(即14582KH)组成,我已经验证了它尝试插入的值作为主键并不存在。
我已经尝试过压缩和修复数据库,这对我们没有帮助。此表中的字段与其他表中的字段之间没有关系,它完全独立。
有什么想法吗?
答案 0 :(得分:1)
area列的数据类型为Number,但是使用
将字符串插入其中"'" & coverArea.Text & "'"
您应该将命令创建为:
cmd = New OleDbCommand("INSERT INTO PrivateTableName VALUES('" &
Serial.Text &
"','Pending',"
& coverArea.Text
& ",'')", myConnection)
我无法想象这会在调试模式下工作。只有当你直接对数据库运行INSERT语句时,你可能会使用正确的语法。
更好,更安全的方法是使用DbParameters
答案 1 :(得分:0)
虽然我不确定为什么重要,但指定字段似乎可以解决问题。
cmd = New OleDbCommand("INSERT INTO PrivateTableName ([My Order Number],
[BV Order Number], [Area]) VALUES('" & Serial.Text & _ "','Pending'," &
coverArea.Text & ")", myConnection)
答案 2 :(得分:0)