【发布时间】:2016-05-23 07:09:24
【问题描述】:
我有一个名为 VideoGalleryDelete 的存储过程。我正在使用FormView 和Gridview 来插入、更新、显示和删除数据。 VideoGallery 是我的主表,PK VideoId 有一个外键为 CategoryId 。
当我点击Delete linkButton时,它说Procedure or function has too many arguments specified
这是我的 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>
【问题讨论】:
-
我相信这可能是因为您在 GridView 上同时拥有 VideoId 和 CategoryId 作为 DataKeyNames,因此它试图同时使用它们来识别要删除的记录。您可以通过将存储过程设置为接受然后忽略的 CategoryId 来证明这一点。但是,这不是一个好的解决方案,所以这是评论而不是答案。
-
我给了两个数据键名并不重要。我的删除参数是 Videoid
标签: c# asp.net sql-server stored-procedures sqldatasource