VideoGalleryDelete
というストアドプロシージャが1つあります。私はFormView
とGridview
を使ってデータの挿入、更新、表示、削除を行っています。 VideoGallery
はPK VideoId
のプライマリテーブルで、外部キーはCategoryId
です。プロシージャまたは関数にFormViewおよびSQL Serverで指定された引数が多すぎます。C#
私は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="VideoId,CategoryId"
のbeacuaseを通過されていますVideoIdとCategoryIdをGridViewのDataKeyNamesとして使用するため、両方を使用して削除するレコードを識別しようとしています。おそらく無視するCategoryIdを受け入れるようにストアドプロシージャを設定することで、これを証明できます。しかし、それは良い解決策ではないので、これは答えではありません。 –私は2つのデータキーを与えても問題ありません。私の削除パラメータはVideoid –