SqlParameter 输出返回 null

问题描述 投票:0回答:1

我有一个存储过程,列出从

@index
开始的项目并返回下一个
@length
项目。此外,
@available
Output
参数返回集合中项目的计数。

CREATE PROCEDURE dbo.List
    @index int = 0,
    @lenth int = 10,
    @available int OUTPUT
AS
BEGIN
    SELECT * FROM dbo.table1 WHERE ...;
    available = (SELECT COUNT(*) FROM dbo.table1);
END

table1
包含 12 行。

我使用

System.Data.SqlClient
运行一些 .NET 代码 (C#) 来获取数据:

await using var connection = new SqlConnection("Server=...");

await connection.OpenAsync();

await using var command = new SqlCommand("dbo.List", connection) { CommandType = CommandType.StoredProcedure };

command.Parameters.Add(new SqlParameter("index", SqlDbType.Int) { Value = 0 });
command.Parameters.Add(new SqlParameter("length", SqlDbType.Int) { Value = 3 });

var outParam = new SqlParameter("AvailableItems", SqlDbType.Int) { Direction = ParameterDirection.Output };

command.Parameters.Add(outParam);

await using var reader = await command.ExecuteReaderAsync();

while (await reader.ReadAsync())
{
    Console.WriteLine(reader["Name"]);
}

Console.WriteLine("Available items: " + outParam.Value + " rows");

这会输出类似的内容

Joe
Anne
Raj
Available items:  rows

由于某种原因,

outParam.Value
返回
null
,而预期结果是12。

有人了解这里发生了什么吗?我的“行数”去哪儿了?

sql .net sql-server .net-core parameters
1个回答
0
投票

传递给

SqlParameter
ctor 的参数名称应与存储过程匹配,尝试将代码更改为:

var outParam = new SqlParameter("available", SqlDbType.Int) 
{ 
   Direction = ParameterDirection.Output 
};
© www.soinside.com 2019 - 2024. All rights reserved.