过程或函数在 FormView 和 SQL SERVER c# 中指定的参数太多

Procedure or function has too many arguments specified in FormView and SQL SERVER c#

我有一个名为 VideoGalleryDelete 的存储过程。我正在使用 FormViewGridview 来插入、更新、显示和删除数据。 VideoGallery 是我的主要 table 与 PK VideoId 并且它有一个外键 CategoryId

当我点击 Delete linkButton 时,提示 过程或函数指定的参数过多

这是我的 SP :

ALTER PROCEDURE [dbo].[VideoGalleryDelete]
@VideoId int
AS
BEGIN

DELETE FROM [dbo].[VideoGallery]
      WHERE VideoId = @VideoId
      END

GridView 及其分配的 SqlDataSource :

<asp:GridView ID="gvVideo" CssClass="table" runat="server" OnSelectedIndexChanged="gvVideo_SelectedIndexChanged" AutoGenerateColumns="False" DataKeyNames="VideoId,CategoryId" DataSourceID="sdVideoList">
    <Columns>
        <asp:BoundField DataField="VideoId" Visible="false" HeaderText="VideoId" InsertVisible="False" ReadOnly="True" SortExpression="VideoId" />
        <asp:BoundField DataField="VideoLink" HeaderText="Video Link" SortExpression="VideoLink" />
        <asp:BoundField DataField="CategoryId" HeaderText="Category Id" SortExpression="CategoryId" />
        <asp:TemplateField ItemStyle-CssClass="Center" HeaderStyle-Width="15%">
            <ItemTemplate>
                <asp:ImageButton ImageUrl="~/images/edit.png" ID="lnkedit" Style="margin-left: 15px" CommandName="Select" runat="server" Width="20px"></asp:ImageButton>
                <asp:ImageButton ImageUrl="~/images/delete.png" ID="lnkDelete" CommandName="Delete" Style="margin-left: 15px" runat="server" Width="20px" OnClientClick="return ConfirmDelete();"></asp:ImageButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<asp:SqlDataSource ID="sdVideoList" runat="server" ConnectionString="<%$ ConnectionStrings:WebAAERT_DBConnectionString %>" DeleteCommand="VideoGalleryDelete" DeleteCommandType="StoredProcedure" SelectCommand="VideoGallerySelect" SelectCommandType="StoredProcedure">
    <DeleteParameters>
        <asp:Parameter Name="VideoId" Type="Int32" />
    </DeleteParameters>
    <SelectParameters>
        <asp:Parameter DefaultValue="0" Name="CategoryId" Type="Int32" />
    </SelectParameters>

我认为您误用了网格视图的 DataKeyNames 属性 control.This 属性 最好只包含主键字段来标识当前 row.Also 在此 属性 上设置的每个值都将传递给删除命令。

您的删除存储过程采用一个参数,但由于 DataKeyNames="VideoId,CategoryId" 而传递了两个值。因此您可以执行@Chris Flynn 建议的操作或将您的网格视图更改为 DataKeyNames="VideoId"