我的错误如下:
无法为表格中的标识列插入显式值' Snacks'当IDENTITY_INSERT设置为OFF时。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。
例外详细信息:
System.Data.SqlClient.SqlException:无法在表格中插入标识列的显式值' Snacks'当IDENTITY_INSERT设置为OFF时。
我创建了一个带有SQL数据库的表,该数据库具有唯一的ID,描述和价格选项,主键是ID。
如何在Visual Web Developer 2010中修复此错误?
<asp:SqlDataSource ID="sdsSnacks" runat="server"
ConnectionString="<%$ ConnectionStrings:cs3201 %>"
DeleteCommand="DELETE FROM [Snacks] WHERE [SID] = @SID"
InsertCommand="INSERT INTO [Snacks] ([Price], [Description]) VALUES (@Price, @Description)"
SelectCommand="SELECT [Price], [Description], [SID] FROM [Snacks]"
UpdateCommand="UPDATE [Snacks] SET [Price] = @Price, [Description] = @Description WHERE [SID] = @SID">
<DeleteParameters>
<asp:Parameter Name="SID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Price" Type="Decimal" />
<asp:Parameter Name="Description" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Price" Type="Decimal" />
<asp:Parameter Name="Description" Type="String" />
<asp:Parameter Name="SID" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>`
答案 0 :(得分:1)
这不是一个特别的ASP.NET问题,它是一个SQL错误。
当您有identity
列时,每次添加新行时,该列都应包含一个新值(通常递增1)。
您显示的错误是因为您或您正在使用的技术试图告诉SQL Server该identity
列中的值应该是什么。
您可以使用以下选项(我知道)......
如果您编写了SQL查询并列出了所有列,那么您应该删除identity
列。例如......
INSERT INTO [MYTABLE] ([IDENTCOLUMN],[MYVAL]) VALUES (1,1)
应该成为......
INSERT INTO [MYTABLE] ([MYVAL]) VALUES (1)
如果您编写了SQL查询但没有列出所有列,那么您应该编写所有列而不使用identity
列。例如......
INSERT INTO [MYTABLE] VALUES (1,1)
应该成为......
INSERT INTO [MYTABLE] ([MYVAL]) VALUES (1)
否则,如果您确实想要专门设置identity
列的值,则需要告诉SQL Server您通过使用覆盖了正常的identity
处理以下......
SET IDENTITY_INSERT [MYTABLE] ON
INSERT INTO [MYTABLE] ([IDENTCOLUMN],[MYVAL]) VALUES (1,1)
SET IDENTITY_INSERT [MYTABLE] OFF
答案 1 :(得分:0)
您需要设置IDENTITY_INSERT:
语法是:
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
答案 2 :(得分:0)
您在数据库中将ID列指定为Identity。之后,您尝试向该列插入特定值,这很可能是您不想做的事情。
插入时删除ASP.NET代码中的ID值,它将自动为您生成。