仅使用名称和类型创建 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对象类型的一个实例。
我在使用 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对象类型的一个实例。