从vb.net 2008错误调用SQL Server存储过程

时间:2016-10-07 12:17:54

标签: sql-server vb.net sql-server-2008 stored-procedures

我正在尝试从vb.net 2008执行SQL Server存储过程。但是我收到了错误

  

过程或函数'Sp_Messages_Display'需要参数'@MsgSno',这是未提供的。

这是我的代码

Public Function Load(ByVal CnnStr As String, ByVal MsgSno As Long, ByVal Msg_Status As eMsgStatus) As ADODB.Recordset
    Dim Cnn As ADODB.Connection
    Dim Com As ADODB.Command
    Cnn = New ADODB.Connection
    Cnn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
    Cnn.ConnectionString = CnnStr
    Cnn.Open()
    Com = New ADODB.Command
    Com.ActiveConnection = Cnn

    With Com
        .CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
        .CommandText = "Sp_Messages_Display"
        .CreateParameter("@MsgSno", ADODB.DataTypeEnum.adBigInt, ADODB.ParameterDirectionEnum.adParamInput, 4, MsgSno)
        .CreateParameter("@Msg_Status", ADODB.DataTypeEnum.adSmallInt, ADODB.ParameterDirectionEnum.adParamInput, 4, Msg_Status)
        Load = .Execute(RecordsAffected)
        SqlError = Err.Description
    End With

    If Not Load.EOF Then
        With Me
            .MsgSno = Load.Fields("MsgSno").Value
        End With
    End If
    Com.ActiveConnection = Nothing
    Cnn = Nothing
End Function

请在我错的地方帮助我。提前致谢

2 个答案:

答案 0 :(得分:2)

您需要向Command添加参数,CreateParameter仅创建新实例,而不将其添加到Command的集合中:

With Com
    CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
    .CommandText = "Sp_Messages_Display"
    .Parameters.Add("@MsgSno", ADODB.DataTypeEnum.adBigInt, ADODB.ParameterDirectionEnum.adParamInput, 4, MsgSno)
    .Parameters.Add("@Msg_Status", ADODB.DataTypeEnum.adSmallInt, ADODB.ParameterDirectionEnum.adParamInput, 4, Msg_Status)
    Load = .Execute(RecordsAffected)
    SqlError = Err.Description
End With

我现在相信你没有使用 VB.NET ,但是 VB ,在这种情况下,这是从MSDN开始的方式:

ccmd.parameters.Append ccmd.CreateParameter(, adInteger, adParamReturnValue, , NULL)   ' return value
ccmd.parameters.Append ccmd.CreateParameter("InParam", adVarChar, adParamInput, 20, "hello world")   ' input parameter
ccmd.parameters.Append ccmd.CreateParameter("OutParam", adVarChar, adParamOuput, 20, NULL)   ' output parameter

答案 1 :(得分:1)

从文档到CreateParameter

  

此方法不会自动将Parameter对象附加到Command对象的Parameters集合。

您需要将已创建的参数添加到集合中。