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

Create SqlParameter with name and type only (no value assigned)

我在使用 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 来自订单 ORDER BY OrderId DES'需要参数'@ID',但未提供。"

对于在这种情况下如何创建没有赋值的 SqlParameter 有什么建议吗?

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

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

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

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

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

当执行查询时,您可以通过

检索该值
parameter.Value

它将return对象类型的一个实例。