繁体   English   中英

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

[英]How to save a new record when the id key is auto incremented

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

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

从BindingNavigator中单击“添加新”后,单击“保存数据”时发生问题

例如,我单击“添加新”,填充除id文本(空白ID)以外的所有字段,然后单击“保存数据”,然后发生错误

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

但是用户不需要填写此字段,而是必须在保存后从数据库返回

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

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

没结果。

我该如何处理?

谢谢

不要在您的插入语句中包括标识列。

如果您的陈述是

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

只需将其更改为

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

听起来您有两个问题。

首先,您总是在插入-您使用什么逻辑来决定“保存”是插入还是更新? 我认为是因为您遇到了以下错误:“无法插入显式...”

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

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

)

仔细检查我的语法-不确定您使用的是哪个版本的SQL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM