过程或函数在 FormView 和 SQL SERVER c# 中指定的参数太多
Procedure or function has too many arguments specified in FormView and SQL SERVER c#
我有一个名为 VideoGalleryDelete
的存储过程。我正在使用 FormView
和 Gridview
来插入、更新、显示和删除数据。 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"
我有一个名为 VideoGalleryDelete
的存储过程。我正在使用 FormView
和 Gridview
来插入、更新、显示和删除数据。 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"