2013-04-26 1 views
0

Каждый раз, когда я запускаю свою функцию обновления, я генерирую процедуру или функцию с слишком большим количеством аргументов, и я думаю, что я слишком долго смотрел на нее потому что я не могу найти причину. Любые рекомендации будут оценены.Процедура или функция слишком много аргументов, указанных в ASP.NET, с использованием VB.NEt

Мой VB.NET код выглядит следующим образом:

Public Function UpdateGenInfo_E1_01_02(ByVal pstrCon As String, _ 
            ByVal appNo As String, _ 
            ByVal revNo As String, _ 
            ByVal prName As String, _ 
            ByVal prAddr As String, _ 
            ByVal prAddr2 As String, _ 
            ByVal prCity As String, _ 
            ByVal prState As String, _ 
            ByVal prZip As String) As Integer 
    Try 


     'Create parameter 
     Dim lsqlParams(8) As SqlParameter 
     'fill parameter 

     lsqlParams(0) = New SqlParameter("@AppNo", appNo) 
     lsqlParams(1) = New SqlParameter("@RevNo", revNo) 
     lsqlParams(2) = New SqlParameter("@PrName", prName) 
     lsqlParams(3) = New SqlParameter("@PrAddr", prAddr) 
     lsqlParams(4) = New SqlParameter("@PrAddr2", prAddr) 
     lsqlParams(5) = New SqlParameter("@PrCity", prCity) 
     lsqlParams(6) = New SqlParameter("@PrState", prState) 
     lsqlParams(7) = New SqlParameter("@PrZip", prZip) 
     'Return dataset 
     Return SqlHelper.ExecuteNonQuery(pstrCon, CommandType.StoredProcedure, "up_UpdateGenInfo_E1_01_02", lsqlParams) 
    Catch ex As Exception 
     'Throw error 

     Throw ex 
    End Try 
End Function 

Моя хранимая процедура выглядит следующим образом:

USE [EpUpdates] 
GO 
/****** Object: StoredProcedure [dbo].[up_UpdateGenInfo_E1_01_02] Script Date: 04/26/2013 12:00:24 ******/ 
SET ANSI_NULLS OFF 
GO 
SET QUOTED_IDENTIFIER OFF 
GO 
ALTER PROCEDURE [dbo].[up_UpdateGenInfo_E1_01_02] 
(

    @AppNo varchar(10), 
    @RevNo varchar(4), 
    @PrName varchar(10), 
    @PrAddr varchar(50), 
    @PrAddr2 varchar(50), 
    @PrCity varchar(30), 
    @PrState varchar(2), 
    @PrZip varchar(10) 
) 
AS 
    UPDATE EpUpdates.dbo.GenInfo_E1_01_02 
    SET [email protected], 
      [email protected], 
      PrAddr2= @PrAddr2, 
      [email protected], 
      [email protected], 
      [email protected] 
    WHERE (AppNo = @AppNo) 
    AND (RevNo = @RevNo) 
+0

Я предполагаю, что '(«@ PrAddr2», prAddr)' просто опечатка, и это вряд ли будет вашей реальной проблемой. –

ответ

2

У вас есть C# Стиль Длина массива спецификатор в программе VB.

Dim lsqlParams(8) As SqlParameter  ' in C# this would create a length of 8 items. 
       ' in VB this creaes 9 items! (the upper bound of array) 

Ваша ошибка в элементе лишнего пустого элемента. изменить на (7).

Чтобы избежать такого рода ошибки я обычно использую список accmulate элементов (не любят установки номера массива)

Dim lsqlParams as new List(of SqlParameter) 
lsqlParams.add(New SqlParameter(blah...)) 
' then pass to routine via ... 
lsqlParams.ToArray 
+1

Я изменил длину массива от 8 до 7, но я все равно генерирую ту же ошибку. –

+0

Добавьте текст точной ошибки в вопрос, если возможно – DarrenMB

+0

Точная ошибка, которую я получаю, - up_UpdateGenInfo_E1_01_02 имеет слишком много аргументов. Я также попытался использовать ваш другой метод, используя список, но не имел большой удачи. –

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