2013-05-10 5 views
1

У меня есть код ниже, который запускает хранимую процедуру для удаления записи, сопоставляя параметр с первичным ключом в таблице. Я запускал код через debug ang, который все правильно присваивает, но я все равно получаю сообщение об ошибке, в котором указано слишком много аргументов. Я думаю, что это имеет какое-то отношение к моей хранимой процедуре, потому что значения присваиваются должным образом.Слишком много аргументов Ошибка в хранимой процедуре

Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView1.RowCommand 
    Dim CurrentCommand As String = e.CommandName 
    Dim CurrentRow As Integer = Int32.Parse(e.CommandArgument.ToString()) 
    Dim ID As String = GridView1.DataKeys(CurrentRow).Value 

    sqlds.DeleteParameters.Add("KeyOpType", ID) 
    sqlds.Delete() 


End Sub 

хранимых процедур в SQL Server 2008

ALTER PROCEDURE [dbo].[GetGenInfo_DeleteMines] 
(@KeyOpType int) 
AS 
Delete FROM GenInfo_OpType 
Where KeyOpType = @KeyOpType 
+2

Что такое 'sqlds'? Почему вы используете 'DeleteParameters.Add' вместо объекта команды, установленного для хранимой процедуры, и просто' Parameters.AddWithValue() 'и' cmd.ExecuteNonQuery() '? Вам нужно выбрать, будет ли ваш код VB.Net вызывать специальные команды (например, DELETE) или выполнять хранимые процедуры. –

+0

Sqlds - мой sqldatasource. Я хочу просто использовать хранимые процедуры. Должен ли я просто удалить элемент управления sqldatasource и создать соединения в моем коде? –

+0

Да, почему вы используете источник данных, когда ваша цель состоит в вызове хранимой процедуры, которая удаляет одну строку? Это похоже на опорожнение всего холодильника, чтобы выбрасывать плохое молоко. –

ответ

0

Где вы заходящего вашу команду удаления? Мы точно знаем, что он вызывает правильную процедуру? Я думаю, это то, что вы пытаетесь сделать. Проверьте это:

SQLDataSource with GridView and CRUD

+0

Вот мой SQLDataSource. –

0

Не уверен, если это решит проблему, что ваши имеющие .... но

Оказывается, вам не хватает Бегин в хранимой процедуре. Я новичок в этом, но я думаю, что это необходимо.

ALTER PROCEDURE [dbo].[GetGenInfo_DeleteMines] 
(@KeyOpType int) 
AS 
BEGIN <-----------------------------------MISSING THIS 
Delete FROM GenInfo_OpType 
Where KeyOpType = @KeyOpType 

Плюс, я не вижу, где вы вызываете SP в коде vb.

EDIT: Для того, чтобы дать дальнейшие примеры ....

Мой код позади на Command г.в. Row будет выглядеть следующим образом ... (если его приход от кнопки/ссылки на ГВ должны добавить CommandName = «SomeCommandName» для управления на gv)

Protected Sub gvName_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvName.RowCommand 

     Dim tGrid As GridView = DirectCast(sender, GridView) 
     Dim tIndex As Integer = Convert.ToInt32(e.CommandArgument) 
     Dim row As GridViewRow = Nothing 

Select Case e.CommandName 
      Case "SomeCommandName" 
       CallToDelete(tGrid.DataKeys(tIndex).Value) 
     End Select 

    End Sub 
+0

BEGIN не требуется (хотя это лучший способ ИМХО). И это не очень помогает, если вы добавите BEGIN, но не добавляете END. Во всяком случае, это не является источником проблемы. –

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