“过程或函数需要未提供的参数”

时间:2016-05-04 19:03:49

标签: vb.net

我一直试图找出这个错误一段时间,一些帮助将不胜感激。谢谢。 这是我的错误消息: 过程或函数'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

如果您需要更多信息,请告诉我,我会添加它。

4 个答案:

答案 0 :(得分:0)

如果作为SQL参数值提供的对象为NULL,但通常会发生这种情况,但存储过程不允许空值(您的值不是)。您可以在此行sqlcomm.Parameters.AddWithValue("@Election_ID", eventid)上设置条件断点,以确保eventid参数不为空。

使用防御性编码也是一个好主意,并且在你的getAvailableSMSNumbers函数中,检查以确保eventid不为空,如果是,则抛出异常或为其提供某种类型的反馈用户。

答案 1 :(得分:0)

作为一个选项,您可以尝试重新编译存储过程以允许NULL参数:

CREATE PROCEDURE {databaseOwner}{objectQualifier}getAvailableSMSNumbers

    @Election_ID nvarchar(20) = NULL

AS  

这意味着如果输入中没有值,则Parameter的默认值将为null。如果您想要无错误地返回空数据,这个解决方案会很好。在任何其他情况下,您必须调试VB代码并了解问题的起始位置。

答案 2 :(得分:0)

想想你如何称呼你的程序。当你打电话时,你需要提供程序的价值:例如,

Call get_particular_girl_from_girlsTable("Jane")

其中get_particular_girl_from_girlsTable是程序和" Jane"是参数GirlName的值。

答案 3 :(得分:0)

您是否验证

cmd.CommandType = CommandType.**StoredProcedure**

默认情况下,该值为Text,需要SELECT,INSERT或其他命令文本。