0

我在 sql server 2008 中创建了一个数据库和一个带有自动增量 id 字段的表

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

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

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

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

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

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

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

没有结果。

我怎么能处理呢?

谢谢

4

2 回答 2

4

不要在插入语句中包含标识列。

如果你的陈述是

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

只需将其更改为

INSERT INTO MyTable ( SomeField, SomeOtherField) VALUES ( 'SomeValue', 'AnotherValue')
于 2012-05-18T19:45:49.527 回答
0

听起来你有两个问题。

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

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

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

)

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

于 2012-05-18T19:49:11.830 回答