【问题标题】:SQL Parameter not found未找到 SQL 参数
【发布时间】:2014-02-21 21:11:09
【问题描述】:

错误:

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

存储过程的摘录:

我在 SQL Server 2012 上有一个存储过程。该过程看起来像这样...

SELECT *
FROM Orders
WHERE Orders.CustomerID = @param1 AND 
    Orders.CustomerJoinDate = @param2

我从我的代码 {Using Visual Studio 2008} 中这样调用它...

Visual Studios 中的调用方法:

首先我创建一个要传递的参数数组...

Dim Param() As SqlClient.SqlParameter = 
    New SqlClient.SqlParameter() 
        {
            New SqlClient.SqlParameter("@Param1", Me.cmbFilter1.Text), 
            New SqlClient.SqlParameter("@Param2", Me.cmbFilter2.Text)
        }

然后我遍历参数并将它们添加到要由数据读取器执行的命令中。

mSQLCmd 设置为调用上述存储过程...

mSQLCmd.Parameters.Clear()
mSQLCmd.CommandText = SQLCmd

For Each sParam As SqlClient.SqlParameter In Param
    mSQLCmd.Parameters.AddWithValue(sParam.ParameterName, sParam.Value)
Next

在以下情况下发生错误:

我尝试运行mSQL.ExecuteReader() 有人能指出我正确的方向吗?我已经验证了 Param() 中包含的每个参数的值都正确。

我还在 SQL Server 上测试了存储过程,并在提供两个必要参数时验证了它是否可以正常工作。 vb 方面出了点问题。

【问题讨论】:

  • 可能区分大小写....
  • 你能验证SQL客户端正在执行的命令吗?听起来好像执行sp时没有包含参数。
  • 你也可以不用@....我记得类似的事情New SqlClient.SqlParameter("param1", Me.cmbFilter1.Text)
  • 你能包括你的程序的完整定义,而不仅仅是身体吗?
  • 这只是一个错字? foreach 使用 Param 而不是 Params

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


【解决方案1】:

如果你调用的是存储过程,你需要相应地设置SqlCommandCommandType

mSQLCmd.CommandText = SQLCmd

// add this line!
mSQLCmd.CommandType = CommandType.StoredProcedure

否则,您尝试调用的存储过程的名称将被解释为您尝试执行的 SQL 命令。

【讨论】:

  • 你可以从我提供的内容中推断出这真是太棒了……啊,是的,显然今天有点晚了。谢谢你在脸上狠狠地扇了一巴掌。 ;)
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多