2015-11-20 6 views
1

У меня есть эта хранимая процедура:GridView - процедура или функция имеет слишком много аргументов указаны

USE [Events2] 
GO 
/****** Object: StoredProcedure [dbo].[spUpdateRegistrantPaper] Script Date: 11/20/2015 7:02:31 AM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[spUpdateRegistrantPaper] 
    -- Add the parameters for the stored procedure here 
     @RegistrantId int, 
     @LocalNumber int, 
     @LocalUnionEmail nvarchar(50), 
     @DistrictId int, 
     @CompletedByFirstName nvarchar(20), 
     @CompletedByLastName nvarchar(25), 
     @CompletedByPhone nvarchar(15), 
     @FirstName nvarchar(20), 
     @LastName nvarchar(25), 
     @Position nvarchar(15), 
     @Email nvarchar(50), 
     @ShirtSize nvarchar(50), 
     @Comments nvarchar(300) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    UPDATE Registrant SET 
     LocalNumberId = @LocalNumber, 
     LocalUnionEmail = @LocalUnionEmail, 
     DistrictId = @DistrictId, 
     CompletedByFirstName = @CompletedByFirstName, 
     CompletedByLastName = @CompletedByLastName, 
     CompletedByPhone = @CompletedByPhone, 
     FirstName = @FirstName, 
     LastName = @LastName, 
     Position = @Position, 
     Email = @Email, 
     ShirtSize = @ShirtSize, 
     Comments = @Comments 
     WHERE RegistrantId = @RegistrantId 
END 

И у меня есть GridView с кнопкой редактирования и обновления.

<UpdateParameters> 
       <asp:Parameter Name="RegistrantId" Type="Int32" /> 
       <asp:Parameter Name="LocalNumber" Type="Int32" /> 
       <asp:Parameter Name="LocalUnionEmail" Type="String" /> 
       <asp:Parameter Name="DistrictId" Type="Int32" /> 
       <asp:Parameter Name="CompletedByFirstName" Type="String" /> 
       <asp:Parameter Name="CompletedByLastName" Type="String" /> 
       <asp:Parameter Name="CompletedByPhone" Type="String" /> 
       <asp:Parameter Name="FirstName" Type="String" /> 
       <asp:Parameter Name="LastName" Type="String" /> 
       <asp:Parameter Name="Position" Type="String" /> 
       <asp:Parameter Name="Email" Type="String" /> 
       <asp:Parameter Name="ShirtSize" Type="String" /> 
       <asp:Parameter Name="Comments" Type="String" /> 
      </UpdateParameters> 

Но я получаю эту ошибку:

Procedure or function spUpdateRegistrantPaper has too many arguments specified.

Я не вижу, почему ... ??? Что я могу сделать, чтобы исправить это?

EDIT

Вот полный код asp.net:

<%@ Page Title="" Language="C#" MasterPageFile="~/admin/admin.master" AutoEventWireup="true" CodeFile="viewregistrantpaper.aspx.cs" Inherits="viewreg" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
<h1>View Registrant</h1> 
     <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
      AllowSorting="True" AutoGenerateColumns="False" 
      DataSourceID="SqlDataSourceViewRegistrant" 
      CssClass="mGrid" 
    PagerStyle-CssClass="pgr" 
    AlternatingRowStyle-CssClass="alt" > 
      <Columns> 
       <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
       <asp:BoundField DataField="LocalNumberId" HeaderText="Local" 
        SortExpression="LocalNumberId" /> 
       <asp:BoundField DataField="LocalUnionEmail" HeaderText="Local Email" 
        SortExpression="LocalUnionEmail" /> 
       <asp:BoundField DataField="DistrictId" HeaderText="District" 
        SortExpression="DistrictId" /> 
       <asp:BoundField DataField="CompletedByFirstName" HeaderText="Completed By First Name" 
        SortExpression="CompletedByFirstName" /> 
       <asp:BoundField DataField="CompletedByLastName" HeaderText="Completed By Last Name" 
        SortExpression="CompletedByLastName" /> 
       <asp:BoundField DataField="CompletedByPhone" HeaderText="Completed By Phone" 
        SortExpression="CompletedByPhone" /> 
       <asp:BoundField DataField="FirstName" HeaderText="First Name" 
        SortExpression="FirstName" /> 
       <asp:BoundField DataField="LastName" HeaderText="Last Name" 
        SortExpression="LastName" /> 
       <asp:BoundField DataField="Position" HeaderText="Position" 
        SortExpression="Position" /> 
       <asp:BoundField DataField="Email" HeaderText="Email" 
        SortExpression="Email" /> 
       <asp:BoundField DataField="ShirtSize" HeaderText="Shirt Size" 
        SortExpression="ShirtSize" /> 
       <asp:BoundField DataField="Comments" HeaderText="Comments" 
        SortExpression="Comments" /> 
      </Columns> 

     </asp:GridView> 
    <div style=" width:100%; overflow: hidden;"> 
     <asp:SqlDataSource ID="SqlDataSourceViewRegistrant" runat="server" 
      ConnectionString="<%$ ConnectionStrings:Events2 %>" 
      DeleteCommand="spDelRegistrant" DeleteCommandType="StoredProcedure" 
      InsertCommand="spInsRegistrantPaper" InsertCommandType="StoredProcedure" 
      SelectCommand="spGetRegistrantPaper" SelectCommandType="StoredProcedure" 
      UpdateCommand="spUpdateRegistrantPaper" 
      UpdateCommandType="StoredProcedure"> 
      <DeleteParameters> 
       <asp:Parameter Name="RegistrantId" Type="Int32" /> 
      </DeleteParameters> 
      <InsertParameters> 
       <asp:Parameter Name="LocalNumber" Type="Int32" /> 
       <asp:Parameter Name="LocalUnionEmail" Type="String" /> 
       <asp:Parameter Name="DistrictId" Type="Int32" /> 
       <asp:Parameter Name="CompletedByFirstName" Type="String" /> 
       <asp:Parameter Name="CompletedByLastName" Type="String" /> 
       <asp:Parameter Name="CompletedByPhone" Type="String" /> 
       <asp:Parameter Name="FirstName" Type="String" /> 
       <asp:Parameter Name="LastName" Type="String" /> 
       <asp:Parameter Name="Position" Type="String" /> 
       <asp:Parameter Name="Email" Type="String" /> 
       <asp:Parameter Name="ShirtSize" Type="String" /> 
       <asp:Parameter Name="Comments" Type="String" /> 
      </InsertParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="RegistrantId" Type="Int32" /> 
       <asp:Parameter Name="LocalNumber" Type="Int32" /> 
       <asp:Parameter Name="LocalUnionEmail" Type="String" /> 
       <asp:Parameter Name="DistrictId" Type="Int32" /> 
       <asp:Parameter Name="CompletedByFirstName" Type="String" /> 
       <asp:Parameter Name="CompletedByLastName" Type="String" /> 
       <asp:Parameter Name="CompletedByPhone" Type="String" /> 
       <asp:Parameter Name="FirstName" Type="String" /> 
       <asp:Parameter Name="LastName" Type="String" /> 
       <asp:Parameter Name="Position" Type="String" /> 
       <asp:Parameter Name="Email" Type="String" /> 
       <asp:Parameter Name="ShirtSize" Type="String" /> 
       <asp:Parameter Name="Comments" Type="String" /> 
      </UpdateParameters> 
     </asp:SqlDataSource> 
     </div> 
    </p> 

</asp:Content> 
+0

Ты убедитесь, что вы нажимаете правильный DB 'Events2' в соответствии с вашим хранилищем Proc? –

+0

Можете ли вы показать код, который на самом деле вызывает процедуру? – Andrei

+0

@Andrei - Это выглядит как 'SqlDataSource', поэтому мы не можем ожидать никакого кода;) –

ответ

1

Обратите внимание, что вы используете много BoundField с в вашем GridView. Вещь, которая должна знать об этих полях, заключается в том, что их значения автоматически добавляются в команды обновления/вставки. Так, например:

<asp:BoundField DataField="LocalNumberId" HeaderText="Local" 
    SortExpression="LocalNumberId" /> 

Это приведет к парам LocalNumberId добавляется к вызову хранимой прок. Поскольку у вас уже есть LocalNumber в качестве параметра, LocalNumberId получается неожиданным. Таким образом, у вас есть все параметры, которые вы явно объявили в теге UpdateParameters, а также другие, которые находятся в BoundField.

Ваших вариантов, которые я вижу здесь:

  1. Убедитесь, что BoundFields представляют точно Params вы хотите в хранимой процедуре, переименовывать столбцы или ХП Params по мере необходимости.

  2. Избавьтесь от связанных полей, вместо этого используйте TemplateFields с Eval. Простой пример:

    Вместо

    <asp:BoundField DataField="LocalNumberId" HeaderText="Local" 
          SortExpression="LocalNumberId" /> 
    

    Вы бы

    <asp:TemplateField HeaderText="Local" SortExpression="LocalNumberId"> 
        <ItemTemplate> 
         <%# Eval("LocalNumberId") %> 
        </ItemTemplate> 
    </asp:TemplateField> 
    
  3. вручную записать вызов хранимой прок в UpdateCommand, используя только PARAMS вам требуется

+0

Не могли бы вы объяснить, как бы я закодировал «TemplateFields с Eval вместо этого» ... – RockOn

+0

@RockOn, добавил простой пример – Andrei

+0

Отличное спасибо! Я добавил тег '' к вашему примеру, и он сработал. – RockOn

Смежные вопросы