2016-05-23 4 views
1

VideoGalleryDeleteというストアドプロシージャが1つあります。私はFormViewGridviewを使ってデータの挿入、更新、表示、削除を行っています。 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> 
+0

に変更。だからDataKeyNames="VideoId,CategoryId"のbeacuaseを通過されていますVideoIdとCategoryIdをGridViewのDataKeyNamesとして使用するため、両方を使用して削除するレコードを識別しようとしています。おそらく無視するCategoryIdを受け入れるようにストアドプロシージャを設定することで、これを証明できます。しかし、それは良い解決策ではないので、これは答えではありません。 –

+0

私は2つのデータキーを与えても問題ありません。私の削除パラメータはVideoid –

答えて

2

私はグリッドビューコントロールのDataKeyNamesプロパティを悪用していると思います。このプロパティは理想的には現在の行を識別するプライマリキーフィールドのみを含みます。また、このプロパティに設定されたすべての値は、Deleteコマンドに渡されます。

あなたの削除のストアドプロシージャは、一つのパラメータを取りますが、2つの値は、私はあなたが両方を持っているので、これはかもしれ信じるあなたは@クリス・フリンが提案何ができるか、あなたのグリッドビューがDataKeyNames="VideoId"

+0

です。私はDataKeyNamesを与えました。あなたが見ることができるように私はVideoIdとして私の削除パラメータを設定しました –

+0

私はレコードを更新するcategoryIdが必要です。 –

+1

次に、VideoIdを使用してCategoryIdをルックアップします –

関連する問題