【发布时间】:2011-07-10 17:20:21
【问题描述】:
我的插入语句是:
INSERT INTO myTable (inst_id,user_id,app_id,type,accessed_on)
VALUES (3264,2580,'MyApp','Renew',Now);
...所有值的格式都正确。该表具有上述字段和另一个,一个 long int 自动增量键字段。外键是“inst_id”、“user_id”和“app_id”。
我从 Access 收到此错误:
...以及 VS 2005 出错时的以下错误:
System.Data.OleDb.OleDbException:您请求对表的更改 没有成功,因为他们会 在索引中创建重复值, 主键或关系。改变 一个或多个字段中的数据 包含重复数据,删除 索引,或重新定义索引以允许 重复条目,然后重试。
进行此插入查询时,我可以查看数据库并查看每个外键值都存在于它们各自的表中并且已经存在了几个月(对于我正在使用的特定示例)。还设置了这些字段,以便我可以有重复项,所以这不是问题。在其他表中这种性质的调用效果很好。我不需要在插入查询中提供自动增量键值,它会自动为我添加它(就像它应该的那样)。
奇怪的是,如果我在我的代码中这样做:
try
{
//Execute the query here...
}
catch
{
//Execute the same query again
}
...或者如果我只是尝试在 Access 中执行两次,它可以工作。
有没有人遇到过这种情况?同样,这种类型的插入适用于其他表,所有外键都存在于各自的表中,该表的主键设置为“自动递增”,并且所有字段(当然除了主键字段)都是设置为允许重复。
有什么想法吗?
编辑: 插入前的最大键:343085。插入后最大的密钥:343086。格式为:
id: AutoNumber (Field Size=Long Interger, New Values=Increment, Indexed=Yes - No Duplicates)
inst_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)
user_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)
app_id: Text (Field Size=255, Required=Yes, Indexed=Yes - Duplicates OK)
type: Text (Field Size=50, Required=Yes, Indexed=No)
accessed_on: Date/Time (Default Value=Now(), Required=Yes, Indexed=No)
【问题讨论】:
-
要使链接可读,您应该使用 SO 标记而不是 html 来显示链接等。
-
我不太了解 Access,但是如果您有一个触发器,该触发器会在每次插入时插入一个额外的行,并为自动增量键提供一个显式值,那么这可能会发生在某些数据库中。调查这些可能性,并将表的结构与任何相关内容一起发布,并在插入之前和插入之后选择最大的主键并将它们也粘贴到此处。
-
第三次/第四次处决会发生什么?是只有第一次执行失败还是每秒一次?
-
@Whatsit - 只有第一次。
-
@Richard aka cyberkiwi:如果您说“Access2007 没有触发器”,那么我就不会指责您宣传无知;)
标签: c# sql insert ms-access-2007 key