ASP.NET:Identity_Insert设置为OFF - 如何解决此问题?

时间:2014-03-31 09:54:15

标签: sql sql-server

我的错误如下:

  

无法为表格中的标识列插入显式值' 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>`

3 个答案:

答案 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值,它将自动为您生成。