Ошибка с хранимой процедурой (параметр связан) - PullRequest
0 голосов
/ 05 октября 2011

У меня есть хранимая процедура, которую я тестировал напрямую, и она работает, но когда я вызываю ее из кода, я получаю сообщение об ошибке:

"В процедуре или функции editItem указано слишком много аргументов"

Может кто-нибудь подскажите, пожалуйста, почему происходит эта ошибка? Это потому, что мой sqlDataSource передает параметры из BIND, что хранимая процедура не нужна? Я думал, что дополнительные параметры просто игнорируются хранимыми процедурами.

Спасибо

Изменить: Вот еще немного информации о проблеме. Это сбило меня с толку. По сути, я получил несколько элементов, добавленных в шаблоны, например:

                           <EditItemTemplate>
                            <asp:TextBox runat="server" ID="tbEditItemDescription" Text='<%# Bind("itemDescription") %>'></asp:TextBox>
                        </EditItemTemplate>

Теперь, насколько я знаю, Bind предоставляет параметр автоматически. У меня также есть 5 параметров, которые я добавил вручную, например:

                <UpdateParameters>
                    <asp:ControlParameter DbType="Int16" Name="itemTypeId" ControlID="dvIndividualItem$ddlItemTypes"
                        PropertyName="SelectedValue" />
                    <asp:ControlParameter DbType="Int16" Name="itemSubTypeId" ControlID="dvIndividualItem$ddlItemSubTypes"
                        PropertyName="SelectedValue" />
                    <asp:ControlParameter DbType="Int64" Name="itemSubSubTypeId" ControlID="dvIndividualItem$ddlItemSubSubTypes"
                        PropertyName="SelectedValue" />
                    <asp:ControlParameter DbType="Int16" Name="numberOfTurns" ControlID="dvIndividualItem$tbEditEffectTurns"
                        PropertyName="Text" />
                    <asp:ControlParameter DefaultValue="0" DbType="Int64" Name="itemId" ControlID="gvItems"
                        PropertyName="SelectedDataKey.Value" />

Теперь, когда я отлаживал источник данных sql, я обнаружил, что он на самом деле имеет только 5 параметров (те, которые я добавил вручную). Как это возможно, что он дает мне ошибку из-за слишком большого количества параметров, когда он имеет МЕНЬШЕ параметров, чем ему нужно? Или я просто смотрю не в том месте? Я посмотрел в UpdateParameters ==> base ==> count, который содержит 5.

Спасибо за помощь.

1 Ответ

1 голос
/ 05 октября 2011

Проще говоря, вы отправляете больше аргументов, чем ожидает процедура.

Процедура с 3 параметрами:

ALTER PROCEDURE [dbo].[GetData](
    @Arg1 VARCHAR(50),
    @Arg2 VARCHAR(50),
    @Arg3 VARCHAR(50)
)AS

Код с 4 параметрами:

cmd.Parameters.Add("@Arg1", SqlDbType.VarChar).Value = "Arg1"; 
cmd.Parameters.Add("@Arg2", SqlDbType.VarChar).Value = "Arg2"; 
cmd.Parameters.Add("@Arg3", SqlDbType.VarChar).Value = "Arg3"; 
cmd.Parameters.Add("@Arg4", SqlDbType.VarChar).Value = "Arg4"; 

//execute = BANG! Procedure is not expecting @Arg4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...