具有相同密钥的条目已经存在?网格视图



我的页面上有一个GridView控件,任何时候尝试使用随附的删除按钮时,它就会给我上述错误。这是我的代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="ID" DataSourceID="AccessDataSource1">
    <Columns>
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
        <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
            ReadOnly="True" SortExpression="ID" />
        <asp:ImageField DataImageUrlField="picPath" 
        DataImageUrlFormatString="PlaceImages/{0}" HeaderText="Picture"  ControlStyle-CssClass="editPhotoGridFormat">
        <ControlStyle CssClass="editPhotoGridFormat"></ControlStyle>
            </asp:ImageField>
        <asp:BoundField DataField="PicPath" HeaderText="Filename" />
        <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
        <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
        <asp:BoundField DataField="Country" HeaderText="Country" 
            SortExpression="Country" />
    </Columns>
</asp:GridView>
<asp:AccessDataSource ID="AccessDataSource1" runat="server" 
    DataFile="~/App_Data/TravelJoansDB.mdb" 
    DeleteCommand="DELETE FROM [Slides] WHERE [ID] = ?" 
    InsertCommand="INSERT INTO [Slides] ([ID], [PicPath], [Title], [City], [Country]) VALUES (?, ?, ?, ?, ?)" 
    SelectCommand="SELECT * FROM [Slides]" 
    UpdateCommand="UPDATE [Slides] SET [PicPath] = ?, [Title] = ?, [City] = ?, [Country] = ? WHERE [ID] = ?">
    <DeleteParameters>
        <asp:Parameter Name="ID" Type="Int32" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="ID" Type="Int32" />
        <asp:Parameter Name="PicPath" Type="String" />
        <asp:Parameter Name="Title" Type="String" />
        <asp:Parameter Name="City" Type="String" />
        <asp:Parameter Name="Country" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="PicPath" Type="String" />
        <asp:Parameter Name="Title" Type="String" />
        <asp:Parameter Name="City" Type="String" />
        <asp:Parameter Name="Country" Type="String" />
        <asp:Parameter Name="ID" Type="Int32" />
    </UpdateParameters>
</asp:AccessDataSource>

实际上,我在另一个页面上遇到了这个问题,而不仅仅是GridView,上面还有更多内容。我很好奇是否与此有关,所以我只是创建了一个新页面并复制了数据源和GridView,但它仍然给了我同样的错误。桌上只有9个记录,当然没有重复的PK。仅ID字段标记为表中的主要键。发生了什么?

不要使用命令中提到的问号。请像以下那样进行更改,然后它可以正常工作

DeleteCommand="DELETE FROM [Slides] WHERE [ID] = @ID" 
InsertCommand="INSERT INTO [Slides] ([ID], [PicPath], [Title], [City], [Country]) VALUES (@ID, @PicPath, @Title, @City, @Country)" 
SelectCommand="SELECT * FROM [Slides]" 
UpdateCommand="UPDATE [Slides] SET [PicPath] = @PicPath, [Title] = @Title, [City] = @City, [Country] = @Country WHERE [ID] = @ID">

如果您的表ID具有自动增量,则不要在insert命令中使用ID。

DeleteCommand="DELETE FROM [Slides] WHERE [ID] = @ID" 
InsertCommand="INSERT INTO [Slides] ([PicPath], [Title], [City], [Country]) VALUES ( @PicPath, @Title, @City, @Country)" 
SelectCommand="SELECT * FROM [Slides]" 
UpdateCommand="UPDATE [Slides] SET [PicPath] = @PicPath, [Title] = @Title, [City] = @City, [Country] = @Country WHERE [ID] = @ID">

最新更新