创建仅使用名称和类型(未分配值)的 SqlParameter



我在使用 SqlClient 调用一些已声明但未分配参数的 sql 查询时遇到问题。我要运行的查询类似于以下内容

DECLARE @ID int;
SELECT @ID = OrderId
FROM Orders
ORDER BY OrderId DESC;
SELECT @ID;

但是,当我创建 SqlParameter 时,如下所示

SqlParameter parameter = new SqlParameter("ID", SqlDbType.Int);
sqlcommand.Parameters.Add(parameter);

我显示时出错:

"参数化查询
'(@ID int(SELECT @ID = OrderId
FROM Orders
ORDER BY OrderId DES'
期望参数'@ID',但未提供。

关于如何在这种情况下创建没有任何值的 SqlParameter 的任何建议?

在您的情况下,您必须指定@ID是输出参数。

SqlParameter parameter = new SqlParameter("ID", SqlDbType.Int)
{
Direction = ParameterDirection.Output
}

当查询被执行时,你可以通过以下方式检索该值

parameter.Value

它将返回对象类型的实例。

首先,您的查询似乎不会返回单个 int,而是返回许多结果行,每个结果行都包含一个OrderId。您正在从表中的每一行中选择 OrderId 并尝试将其分配给单个 int 变量 - 这不起作用。如果您只想要最大的 OrderId,您可以尝试SELECT TOP 1 @ID = OrderId如下所示。

要回答这个问题,其他答案是正确的,您需要将参数方向指定为输出。输出参数与输入参数不同。

SELECT TOP (1)
@id = OrderId
FROM 
Orders
ORDER BY 
OrderId DESC;

最新更新