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