2014-03-31 68 views
1

我的錯誤如下:ASP.NET:Identity_Insert設置爲OFF - 如何解決此問題?

不能在插入的標識列的顯式值表「零食」當IDENTITY_INSERT設置爲OFF。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:

System.Data.SqlClient.SqlException:不能在插入的標識列的顯式值表 '零食' 當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

這是一個SQL錯誤,不是一個特定的ASP.NET錯誤。你有沒有可以向我們展示的特定SQL查詢? – freefaller

+0

不是我所知道的,有沒有辦法檢查?我是初學者。 –

+0

你使用什麼技術?某些東西(無論是你還是你正在使用的工具)正在創建一個'INSERT'命令,它試圖爲'identity'列設置一個值。要麼改變查詢,所以它沒有,或(作爲人有答案)使用「SET IDENTITY_INSERT」爲特定的表 – freefaller

回答

1

這不是一個特別的ASP.NET問題,它是一個SQL錯誤。

當您有一個identity列時,每次添加新行時,該列都應該包含一個新值(通常會加1)。

您顯示的錯誤是因爲您或您使用的技術正在試圖告訴SQL Server該列應該包含哪些值。

您有以下選項提供給你(我所知道的)...

如果你寫的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你需要告訴您使用以下重寫正常identity處理的SQL Server的價值...

SET IDENTITY_INSERT [MYTABLE] ON 
INSERT INTO [MYTABLE] ([IDENTCOLUMN],[MYVAL]) VALUES (1,1) 
SET IDENTITY_INSERT [MYTABLE] OFF 
+0

這很有道理,但我沒有爲這部分編寫任何代碼。我添加了表格,配置了數據源,然後手動將3列輸入到表格中。 –

+0

看着你更新的問題,我不得不承認你的'INSERT'命令看起來很好,因爲你絕對不是在那裏設置[SID]。非常奇怪 – freefaller

+0

你可以在你的問題中向我們展示'[Snacks]的'CREATE TABLE'',這樣我們就可以確切地確定這些列是什麼? – freefaller

0

需要設置IDENTITY_INSERT ON:

語法是:

SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF } 
+0

我在哪裏可以插入?插入查詢之前,請使用 –

+0

。 – Ric

+0

您需要在插入任何記錄之前執行此命令... –

0

你指定你的ID列是認同你的數據庫。在那之後,你試圖向該列插入一個特定的值,這很可能是你不想做的事情。

插入時刪除ASP.NET代碼中的ID值,它會自動爲您生成。

+0

這是「身份種子:1」嗎? –

+0

這不是第一個爲您生成的數字。請在您嘗試添加數據的位置發佈代碼,然後我會更新我的答案。 –

+0

我還沒有發佈照片的聲望,我正在使用Visual Web Developer –