2016-05-04 2 views
2

Я пытался выяснить эту ошибку некоторое время, некоторая помощь будет оценена по достоинству. Благодарю. Это мое сообщение об ошибке: Процедура или функция 'getAvailableSMSNumbers' ожидает параметра '@Election_ID', который не был предоставлен.«Процедура или функция ожидает параметра, который не был указан»

Вот мой SQL-код:

CREATE PROCEDURE {databaseOwner}{objectQualifier}getAvailableSMSNumbers 
    @Election_ID nvarchar(20)  
AS 
SELECT * 
FROM {databaseOwner}{objectQualifier}icc_sms_phones 
LEFT JOIN {databaseOwner}{objectQualifier}icc_sms_elections ON sms_elections_sms_number = phones_number 

WHERE sms_elections_sms_number IS NULL 
OR sms_elections_id = @Election_ID 

GO 

Функция:

Public Overrides Function getAvailableSMSNumbers(eventid As String) As IDataReader 
    Dim dtable As New DataTable 
    Using sqlconn As New SqlConnection(Me.ConnectionString) 
     Using sqlcomm As New SqlCommand 
      Using sqlda As New SqlDataAdapter 
       sqlcomm.Connection = sqlconn 
       sqlcomm.CommandType = CommandType.StoredProcedure       sqlcomm.CommandText=GetFullyQualifiedName("getAvailableSMSNumbers") 
       sqlcomm.Parameters.AddWithValue("@Election_ID", eventid) 
       sqlda.SelectCommand = sqlcomm 
       sqlconn.Open() 
       sqlda.Fill(dtable) 
       sqlconn.Close() 
       Return dtable.CreateDataReader 
      End Using 
     End Using 
    End Using 
End Function 

Если используется функция:

Public Function getAvailableSMSNumbers(eventid As String) As List(Of phoneModel) 
    Dim numbers As New List(Of phoneModel) 
    Dim number As phoneModel 

    numbers = CBO.FillCollection(Of phoneModel)(dal.getAvailableSMSNumbers(eventid)) 

    For Each number In numbers 'dal.getAvailableSMSNumbers(eventid).Rows 
     number = New phoneModel 
     With number 
      .val = ("PHONES_NUMBER").ToString 
      .text = String.Format("{0:# (###) ###-####}", Long.Parse(.val)) 
     End With 
     numbers.Add(number) 
    Next 
    Return numbers 
End Function 

Если вам нужно больше информации, дайте мне знать, и Я добавлю.

+0

Можете ли вы проверить, что вы действительно передаете действительную строку как 'eventid'? –

+0

Возможный дубликат http://stackoverflow.com/q/3865982/1654818. Пожалуйста, сравните проблему с вашим и добавьте детали, чтобы по возможности отличить их. – JimmyBoh

ответ

0

Это обычно происходит, если объект, указанный в качестве значения вашего параметра SQL, равен NULL, но хранимая процедура не допускает нулевые значения (которых нет у вас). Вы можете установить условную точку останова в этой строке sqlcomm.Parameters.AddWithValue("@Election_ID", eventid), чтобы убедиться, что параметр eventid не равен NULL.

Возможно, было бы неплохо использовать защитное кодирование, а в вашей функции getAvailableSMSNumbers убедитесь, что eventid не является нулевым, а если это так, создайте исключение или предоставите некоторый тип обратной связи для пользователя.

+0

Итак, в соответствии с вашими рассуждениями, если _eventid_ null, параметр @Election_ID не передается в хранимую процедуру? – Steve

+0

Он либо не передан, либо передан, но имеет значение NULL. Если вы хотите, чтобы '@ Election_ID' принимал NULL, вы должны объявить его в своем sproc как' @Election_ID nvarchar (20) = NULL', поэтому оно имеет значение по умолчанию. – DVK

0

Как вариант, вы можете попробовать повторно компилировать хранимую процедуру, чтобы NULL параметра:

CREATE PROCEDURE {databaseOwner}{objectQualifier}getAvailableSMSNumbers 

    @Election_ID nvarchar(20) = NULL 

AS 

Это означает, что значение по умолчанию вашего параметра будет аннулировано в случае, если нет значения на входе. Это решение будет приятным, если вы захотите вернуть пустые данные без ошибок. В любом другом случае вам придется отлаживать код VB и понимать, где начинается проблема.

0

Подумайте, как вы называете себя процедурой. При вызове необходимо поставить значение процедуры: Например,

Call get_particular_girl_from_girlsTable("Jane") 

где get_particular_girl_from_girlsTable процедура и «Джейн» является значением для параметра GirlName.