如何在id键自动递增时保存新记录

时间:2012-05-18 19:37:39

标签: c# ado.net insert auto-increment

我在sql server 2008中创建了一个数据库,并在自动增量id字段

中创建了一个表

我也在c#.net 2008中开发了一个项目

在BindingNavigator“添加新内容”之后单击“保存数据”时会出现问题

例如我单击“添加新”,填写除id文本(空白id)之外的所有字段,然后单击“保存数据”然后出现错误

运行时异常是“notNullAllowedException:列'id'不允许为null。

但是用户不需要填写此字段,但必须在保存

后从数据库返回

我还设置了id的属性:( c#project和sql server)

AutoIncrement = True
AutoIncrementStep = -1 (also I tested 1)
AutoIncrementSeed = -1 (also I tested 1)

没有结果。

我如何处理?

由于

2 个答案:

答案 0 :(得分:4)

不要在Insert语句中包含identity列。

如果您的陈述是

INSERT INTO MyTable (ID, SomeField, SomeOtherField) VALUES (null, 'SomeValue', 'AnotherValue')

只需将其更改为

即可
INSERT INTO MyTable ( SomeField, SomeOtherField) VALUES ( 'SomeValue', 'AnotherValue')

答案 1 :(得分:0)

听起来你有两个问题。

首先,您始终要插入 - 您使用什么逻辑来决定是否“保存”?应该是插入还是更新?我认为这是因为你得到的错误:"无法插入明确的..."

其次,您需要获取SQL在插入时绑定的ID,以便您可以将其写入ID字段以进行下一次save = update。有两种方法可以做到这一点,我更喜欢的方法是使用存储过程来执行插入并传递一个获取SCOPE_IDENTITY()的OUTPUT参数。像这样:

CREATE PROC xyz
(
    @data...
    @NEWID INT OUTPUT
)
AS
    ... do your INSERT ...
    SET @NewID = SCOPE_IDENTITY()

)

仔细检查我的语法 - 不确定您正在使用的SQL版本