2011-12-22 3 views
0

У меня есть FormView, у которого есть режим по умолчанию, установленный на «insert». В форме, в которой пользователь вводит данные, имеется множество элементов управления. Как только я нажимаю кнопку вставки, я получаю эту ошибку: процедура или функция sp_fc_vm_insertDebtorContact указано слишком много аргументовВставить в БД с помощью хранимой процедуры

Я уверен, что хранимая процедура верна, поэтому мне интересно, является ли это моим кодом. Вот код SqlDataSource:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:AuditDevConnectionString2 %>"    

     InsertCommand="sp_fc_vm_insertDebtorContact" 
     InsertCommandType="StoredProcedure" 
     SelectCommand="sp_fc_vm_insertDebtorContact" 
     SelectCommandType="StoredProcedure" > 
     <InsertParameters> 
      <asp:QueryStringParameter DefaultValue="0" Name="DebtorKey" 
      QueryStringField="DebtorKey" Type="Int32" /> 
      <asp:Parameter Name="LastName" /> 
      <asp:Parameter Name="FirstName" /> 
      <asp:Parameter Name="Title" /> 
      <asp:Parameter Name="Authority" DefaultValue="0" /> 
      <asp:Parameter Name="Extension" /> 
      <asp:Parameter Name="Email" /> 
      <asp:Parameter Name="Comments" /> 
      <asp:Parameter Name="Phone" /> 
      <asp:Parameter Name="Attention" DefaultValue="0" /> 
      <asp:Parameter Name="Fax" /> 
      <asp:Parameter Name="Ownership" DefaultValue="0" /> 
      <asp:Parameter Name="Guarantor" DefaultValue="0" /> 
      <asp:Parameter Name="Notices" DefaultValue="0" /> 
      <asp:Parameter Name="Addr1" /> 
      <asp:Parameter Name="Addr2" /> 
      <asp:Parameter Name="City" /> 
      <asp:Parameter Name="State" /> 
      <asp:Parameter Name="ZipCode" /> 
      <asp:Parameter Name="CellPhone" /> 
      <asp:Parameter Name="Country" /> 
     </InsertParameters> 
    </asp:SqlDataSource> 

Здесь хранимая процедура -

ALTER proc [dbo].[sp_fc_vm_insertDebtorContact] (@DebtorKey int, @LastName varchar(50), 
     @FirstName varchar(20), @Title nvarchar(30), @Authority bit, @Extension nvarchar(10), @Email nvarchar(50), 
     @Comments ntext, @Phone nvarchar(20), @Attention bit, @Fax nvarchar(20), @Ownership money, @Guarantor bit, 
     @Notices bit, @Addr1 nvarchar(30), @Addr2 nvarchar(30), @City nvarchar(30), @State nvarchar(30), 
     @ZipCode nvarchar(10), @CellPhone varchar(20), @Country nvarchar(30)) 

AS 

INSERT INTO [FSDev].dbo.Contacts (ClientKey, DebtorKey, lastname, NameKey, firstname, title, authority, extention, 
Email, Notes, Phone, attention, Fax, brokerskey, inactive, [ownership], guarantor, notices, addr1, addr2, 
city, [state], zipcode, cellphone, country) 

VALUES (0, @DebtorKey, @LastName, LEFT(UPPER(@FirstName)+UPPER(@LastName),20), @FirstName, @Title, @Authority, 
@Extension, @Email, @Comments, @Phone, @Attention, @Fax, 0, 0, @Ownership, @Guarantor, 0, @Addr1, @Addr2, 
@City, @State, @ZipCode, @CellPhone, @country) 

Хранимая процедура отлично работает в SQL, так что я думаю, что я делаю что-то неправильно.

+1

Не могу сказать, если это правильно, основываясь только на разметке. Можете ли вы также разместить хотя бы часть декларации хранимой процедуры (где аргументы определены)? – RickNZ

+0

@RickNZ Я опубликовал хранимую процедуру. Можете ли вы взглянуть и сообщить мне, можете ли вы увидеть проблему? – Craig

ответ

0

вы можете сделать это таким образом

private void InsertCommand(Object sender, SqlDataSourceCommandEventArgs e) 
{ 

    SqlParameterCollection _colSqlParameter = new SqlParameterCollection(); 
    _colSqlParameter.Add("LastName", SqlDbType.VarChar).Value = "Last Name Valye"; 
    _colSqlParameter.Add("LastName", SqlDbType.VarChar).Value = "First Name Value"; 
    _colSqlParameter.Add("Title", SqlDbType.VarChar).Value = "Title Value"; 
    _colSqlParameter.Add("Extension", SqlDbType.VarChar).Value = "Extension Value"; 
    e.Command.Parameters.Add(_colSqlParameter); 
} 

<asp:SqlDataSource 
    id="SQLFORINSERTDEMO" 
    runat="server" 
    ConnectionString="" 
    InsertCommandType = "StoredProcedure" 
    InsertCommand="SP_INSERT"   
    OnInserting="InsertCommand" 
    </asp:SqlDataSource> 
+0

Я делаю то же самое для каждого параметра? – Craig

+0

да, конечно, вы можете сделать это для всех параметров. даже вы можете получить результат с помощью команды OnInserted. –

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