SQLCE:为什么我得到“重复值”错误?该字段是否已启用身份?
在我的查询中,我不使用主键字段,因为启用了身份设置。
string sql = @"
INSERT INTO [tblTemplates] (personID, hash, data)
VALUES (@personID, @hash, @data)";
cmd = new SqlCeCommand(sql, cn);
cmd.Parameters.AddWithValue("@personID", newTemplate.personID);
cmd.Parameters.AddWithValue("@hash", newTemplate.templateHash);
cmd.Parameters.AddWithValue("@data", newTemplate.templateData);
cmd.ExecuteNonQuery();
随机地我可以或不能插入一条记录,然后抛出异常:
无法将重复值插入到唯一索引中。
[ 表名称 = tblTemplates,约束名称 = PK_tblTemplates_templateID ]
这是表架构:
-- Script Date: 26.08.2011 10:37 - Generated by ExportSqlCe version 3.5.1.5
CREATE TABLE [tblTemplates] (
[templateID] int NOT NULL IDENTITY (1,1)
, [hash] nvarchar(100) NOT NULL
, [data] image NOT NULL
, [personID] int NOT NULL
);
GO
ALTER TABLE [tblTemplates] ADD CONSTRAINT [PK__tblTemplates__templateID] PRIMARY KEY ([templateID]);
GO
CREATE INDEX [IDX_tblTemplates_personID] ON [tblTemplates] ([personID] ASC);
GO
CREATE UNIQUE INDEX [UQ__tblTemplates__templateID] ON [tblTemplates] ([templateID] ASC);
GO
为什么我会收到此错误?
In my query I don't use primary key field because identity setting is enabled.
string sql = @"
INSERT INTO [tblTemplates] (personID, hash, data)
VALUES (@personID, @hash, @data)";
cmd = new SqlCeCommand(sql, cn);
cmd.Parameters.AddWithValue("@personID", newTemplate.personID);
cmd.Parameters.AddWithValue("@hash", newTemplate.templateHash);
cmd.Parameters.AddWithValue("@data", newTemplate.templateData);
cmd.ExecuteNonQuery();
Randomly I can or cannot insert a record then an exception thrown:
A duplicate value cannot be inserted into a unique index.
[ Table name = tblTemplates,Constraint name = PK_tblTemplates_templateID
]
This is the table schema:
-- Script Date: 26.08.2011 10:37 - Generated by ExportSqlCe version 3.5.1.5
CREATE TABLE [tblTemplates] (
[templateID] int NOT NULL IDENTITY (1,1)
, [hash] nvarchar(100) NOT NULL
, [data] image NOT NULL
, [personID] int NOT NULL
);
GO
ALTER TABLE [tblTemplates] ADD CONSTRAINT [PK__tblTemplates__templateID] PRIMARY KEY ([templateID]);
GO
CREATE INDEX [IDX_tblTemplates_personID] ON [tblTemplates] ([personID] ASC);
GO
CREATE UNIQUE INDEX [UQ__tblTemplates__templateID] ON [tblTemplates] ([templateID] ASC);
GO
Why I get this error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这似乎是一个错误!
解决方法:将字段数据类型从 int 转换为 uniqueidentifier 有效。
我的解决方法尝试:
尝试#1: 相同连接
结果: 这似乎是一个无限循环。
尝试#2: 新连接
结果:经过几次递归调用后,此尝试有所帮助。
It seems like a bug!
Workaround: Converting field data type from int to uniqueidentifier works.
My workaround attempts:
Attempt #1: Same connection
Result: This seems like an endless loop.
Attempt #2: New connection
Result: This try helped after a few recursive calls.
我有类似的问题。我在桌子上使用了
IDENTITY_INSERT
此后,
MyTable
上的所有插入都会抛出“重复值”错误。这个问题的解决方案是
I had similar problem. I used
IDENTITY_INSERT
on my table likeAfter this, all inserts on
MyTable
throw "duplicate value" error.Solution to this problem was