Asp.net 过程或函数“过程名称”需要未提供的参数“Param name”,这种情况很少发生

Asp.net 过程或函数“过程名称”需要未提供的参数“Param name”,这种情况很少发生,asp.net,sql,sql-server,vb.net,stored-procedures,Asp.net,Sql,Sql Server,Vb.net,Stored Procedures,我在VB.NET中有一个web服务函数,它将参数发送到SQL Server存储过程 在部署的机器中,每件事都能完美工作两个月 但是现在错误来了 过程或函数GetEmployeeDetails需要一个未提供的参数@Progress' 在部署的计算机上仅发生一次 错误发生前后,一切正常 Web服务代码: Public Function GetLocation(ByVal oldNumber As Integer, ByVal NewNumber As Integer, ByVal Location

我在VB.NET中有一个web服务函数,它将参数发送到SQL Server存储过程

在部署的机器中,每件事都能完美工作两个月

但是现在错误来了

过程或函数GetEmployeeDetails需要一个未提供的参数@Progress'

在部署的计算机上仅发生一次

错误发生前后,一切正常

Web服务代码:

 Public Function GetLocation(ByVal oldNumber As Integer, ByVal NewNumber As Integer, ByVal Location As String,ByVal Progress As String, ByVal Name As String, ByVal ID As String) As String
 Try
    Command1 = New SqlCommand("GetEmployeeDetails", connection1)

    With Command1
        .CommandType = CommandType.StoredProcedure
        .Parameters.Add("@oldNumber", SqlDbType.Int).Value = oldNumber
        .Parameters.Add("@NewNumber", SqlDbType.Int).Value = NewNumber
        .Parameters.Add("@Location", SqlDbType.VarChar, 10).Value = Location
        .Parameters.Add("@Progress", SqlDbType.Char, 10).Value = IIf(Progress = "", System.DBNull.Value, Progress)
        .Parameters.Add("@Name", SqlDbType.VarChar, 50).Value = Name
        .Parameters.Add("@ID", SqlDbType.VarChar, 50).Value = ID

        .Connection.Open()
        .ExecuteNonQuery()
        .Connection.Close()
    End With
存储过程参数:

ALTER PROCEDURE GetEmployeeDetails 
(
    @oldNumber AS INTEGER,
    @NewNumber AS INTEGER, 
    @Location AS VARCHAR(10),
    @Progress AS CHAR(1),
    @Name AS VARCHAR(50),
    @ID AS VARCHAR(50)
) 
As

我只是想知道,当所有参数都正确传递时,为什么会发生错误?

因为您在sql中将参数声明为CHAR1,但在Vb.net中使用时与Char10类似

试试这个

ALTER PROCEDURE GetEmployeeDetails 
(
    @oldNumber AS INTEGER,
    @NewNumber AS INTEGER, 
    @Location AS VARCHAR(10),
    @Progress AS CHAR(10),
    @Name AS VARCHAR(50),
    @ID AS VARCHAR(50)
) 
As

是否可以尝试向@Progress传递DBNull.Value以外的其他内容?如果该值为空,您可以只传入*或其他内容吗?如果未提供给定参数的值,则可能会发生此错误参数,例如,如果您的源值恰好为null或emptymarc\s,那么我传递DBNULL.value是否错误,但它始终正常工作。不确定它是否真的是@Progress参数-但我怀疑其中一个参数被设置为null或empty,因此存储过程会认为它没有得到值…是@Progress CHAR1还是CHAR10?它是是Char1,但在VB.NET中用作char10,这会使错误很少发生。Char声明真的有很大的不同。因为当我们将10个字符传递给声明为Char1的Sql变量时,它将截断除第一个字符以外的字符。