过程或函数“过程名称”需要一个未提供的参数“参数名称”很少发生
Posted
技术标签:
【中文标题】过程或函数“过程名称”需要一个未提供的参数“参数名称”很少发生【英文标题】:Procedure or function "Procedure name" expects a parameter "Param name" which was not supplied occurs rarely 【发布时间】:2014-04-22 05:00:34 【问题描述】:我在 VB.NET 中有一个 Web 服务函数,它将参数发送到 SQL Server 存储过程。
在部署的机器上运行了两个月,一切正常。
但现在错误
过程或函数 GetEmployeeDetails 需要一个未提供的参数 @Progress'
在部署的机器上只发生一次。
出错前后一切正常。
网络服务代码:
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
我只是想知道为什么所有参数都正确传递后会报错?
【问题讨论】:
您可以尝试将DBNull.Value
以外的其他内容传递给@Progress
吗?如果值为空 (""
) - 你可以传入 *
或其他什么吗?如果您不为给定参数提供值,则可能会发生此错误(“未提供参数”),例如如果您的源值恰好为 null 或为空
marc_s 如果我通过 DBNULL.Value 是不是错了,但它一直正常工作。
不确定它是否真的是 @Progress
参数 - 但我怀疑其中一个参数被设置为 null 或空,因此存储过程“认为”它没有得到值。 ...
@Progress 是 CHAR(1) 还是 CHAR(10)?
它是 Char(1),但在 VB.NET 中用作 char(10) 会产生任何差异
【参考方案1】:
因为您在 sql 中将参数声明为 CHAR(1),但在 Vb.net 中却像 Char(10) 一样使用。
试试这个
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
【讨论】:
该错误很少发生。真的是 Char 声明有很大的不同。因为当我们将 10 个字符传递给声明为 Char(1) 的 Sql 变量时,它将截断除第一个之外的字符。以上是关于过程或函数“过程名称”需要一个未提供的参数“参数名称”很少发生的主要内容,如果未能解决你的问题,请参考以下文章
过程或函数“uspExportGetMailinfoTest”需要参数“@CUSTOMER”,但未提供该参数。我错过了啥?