我在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)
没有结果。
我如何处理?
由于
答案 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版本