【问题标题】:IDENTITY_INSERT is set to OFFIDENTITY_INSERT 设置为 OFF
【发布时间】:2017-04-15 15:07:27
【问题描述】:
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" CssClass="table table-striped"  DataKeyNames="productsID" DataSourceID="productsObj">
    <Columns>
            <asp:BoundField DataField="productsID" HeaderText="productsID" ReadOnly="True" SortExpression="productsID" />
            <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
            <asp:BoundField DataField="price" HeaderText="price" SortExpression="price" />
            <asp:BoundField DataField="image" HeaderText="image" SortExpression="image" />
    </Columns>
</asp:GridView>
<asp:ObjectDataSource ID="productsObj" runat="server" 
     DeleteMethod="Delete" InsertMethod="Insert" 
     OldValuesParameterFormatString="original_{0}" 
     SelectMethod="GetData" 
     TypeName="productsTableAdapters.productsTableAdapter" 
     UpdateMethod="Update">
        <DeleteParameters>
            <asp:Parameter Name="Original_productsID" Type="Int32" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="productsID" Type="Int32" />
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="price" Type="Decimal" />
            <asp:Parameter Name="image" Type="String" />
        </InsertParameters>
        <UpdateParameters>
            <asp:Parameter Name="name" Type="String" />
            <asp:Parameter Name="price" Type="Decimal" />
            <asp:Parameter Name="image" Type="String" />
            <asp:Parameter Name="Original_productsID" Type="Int32" />
        </UpdateParameters>
</asp:ObjectDataSource>

<div class="col-lg-10 col-lg-offset-1 col-md-12">
    <div class="col-lg-6">
        <asp:Label ID="Label1" CssClass="h1" runat="server" Text="Add Albums"></asp:Label>
        <asp:DetailsView ID="DetailsView1" runat="server" CssClass="table table-striped" AutoGenerateRows="False" DataKeyNames="productsID" DataSourceID="productsObj" DefaultMode="Insert">
            <Fields>
                <asp:BoundField DataField="productsID" HeaderText="productsID" ReadOnly="True" SortExpression="productsID" InsertVisible="False" />
                <asp:BoundField DataField="name" HeaderText="name" ControlStyle-CssClass="input-sm form-control" SortExpression="name" />
                <asp:BoundField DataField="price" HeaderText="price" ControlStyle-CssClass=" input-sm form-control" SortExpression="price" />
                <asp:BoundField DataField="image" HeaderText="image" ControlStyle-CssClass=" input-sm form-control" SortExpression="image" />
                <asp:CommandField ShowInsertButton="True" />
            </Fields>
        </asp:DetailsView>
    </div>

SQL Server 表结构:

CREATE TABLE [dbo].[products] 
(
    [productsID] INT IDENTITY (1, 1) NOT NULL,
    [name] VARCHAR(50) NOT NULL,
    [price] DECIMAL(18, 2) NOT NULL,
    [image] VARCHAR(255) NOT NULL,

    PRIMARY KEY CLUSTERED ([productsID] ASC)
);

我有一个显示一些数据的网格视图,我知道希望通过详细信息视图输入一些新行。出于某种奇怪的原因,我不断收到此错误:

当 IDENTITY_INSERT 设置为 OFF 时,无法为表“products”中的标识列插入显式值。

我真的不知道是什么导致它这样做,所以我坚持寻求解决方案。任何帮助或建议都会很棒!

【问题讨论】:

  • 您需要检查您的对象数据源的InsertMethod - 它在做什么,究竟是什么?它是否试图在productsId 列中插入一个值?那是行不通的,因为它是IDENTITY 列...
  • 我在哪里检查插入方法在我的详细信息视图中的位置?我检查了我的 aspx.cs 文件,但没有为我创建插入方法。抱歉,我一周前才开始使用 c#!
  • 转到您的.aspx 文件,将光标放在Insert 名称(InsertMethod 属性中的值)上,然后右键单击并选择Go To Definition - 这应该是您可以使用 InsertMethod 的方法(我原以为它会在您的代码隐藏中,.aspx.cs 文件中)

标签: c# sql-server


【解决方案1】:

错误的原因是因为你试图将值插入到带有标识列的表中,并且 SQL 建议这样做,如果你想这样做,你必须启用

SET IDENTITY_INSERT ON;

如果你不想在标识列中插入值,你可以在下面做

insert into table
(all columns except identity)
values
(col values for all except identity)

【讨论】:

  • 我在哪里准确添加行 SET IDENTITY_INSERT ON;
  • 建议从 InsertParameters 集合中删除 ProductsID 参数。我
  • 感谢您的推荐,我一定会尝试的。完成后会通知您。
猜你喜欢
  • 2013-06-09
  • 2021-08-27
  • 2015-10-18
  • 1970-01-01
  • 2011-10-02
  • 2018-05-27
  • 2012-04-24
  • 2010-10-01
  • 2011-03-07
相关资源
最近更新 更多